如何从Swift 3中的Struct数组中创建JSON?
我有一个问题,从Swift3
的结构数组中产生一个JSON
。我在Stack Overflow
搜索,没有帮助我(这里的screenshot)。我有一个struct
这样的:如何从Swift 3中的Struct数组中创建JSON?
public struct ProductObject {
var prodID: String
var prodName: String
var prodPrice: String
var imageURL: String
var qty: Int
var stock: String
var weight: String
init(prodID: String, prodName: String, prodPrice: String, imageURL: String, qty: Int, stock: String, weight: String){
self.prodID = prodID
self.prodName = prodName
self.prodPrice = prodPrice
self.imageURL = imageURL
self.qty = qty
self.stock = stock
self.weight = weight
}
}
和结构的阵列:
private var productsArray = [ProductObject]()
当数组不为空,然后我试图打印在另一个类,它显示了这调试器:
[app.cartclass.ProductObject(prodID: "2", prodName: "produk 2", prodPrice: "IDR 1000000", imageURL: "someURL", qty: 1, stock: "11", weight: "200")]
该阵列不是有效的JSON object
。如何使其成为有效的JSON
对象?我不知道这部分“app.cartclass.ProductObject”是否有问题,或者不能使其成为有效的JSON object
?
编辑:
这里是我如何序列化为JSON
:
var products = [String:Any]()
for j in 0 ..< cart.numberOfItemsInCart() {
products=["\(j)":cart.getAllProduct(atIndex: j)]
}
if let valid = JSONSerialization.isValidJSONObject(products) {
do {
let jsonproducts = try JSONSerialization.data(withJSONObject: products, options: .prettyPrinted) as! [String:Any]
//print(jsonproducts)
} catch let error as NSError {
print(error)
}
} else {
print("it is not a valid JSON object");
}
如果你想从自定义对象的JSON那么首先您需要将您的自定义对象转换为Dictionary
,所以要一个功能就像在你的ProductObject
结构中一样。
func convertToDictionary() -> [String : Any] {
let dic: [String: Any] = ["prodID":self.prodID, "prodName":self.prodName, "prodPrice":self.prodPrice, "imageURL":self.imageURL, "qty":qty, "stock":stock, "weight":weight]
return dic
}
现在使用这个函数从自定义对象数组生成字典数组。
private var productsArray = [ProductObject]()
let dicArray = productsArray.map { $0.convertToDictionary() }
这里dicArray
由[[String:Any]]
型的,现在你可以使用JSONSerialization
来从这个dicArray
JSON
字符串。
if let data = try? JSONSerialization.data(withJSONObject: dicArray, options: .prettyPrinted) {
let str = String(bytes: data, encoding: .utf8)
print(str)
}
它的工作!所以,我翻译成Dictionary的方式是错误的。非常感谢你! –
@LuthfiRahman欢迎伴侣:) –
为什么不用wana使用类代替struct? –
@ShobhakarTiwari @ShobhakarTiwari因为在类cartclass有很多其他的事情要做 –
然后使用nsjsonserialization将其转换成json数据 –