How to Make JSON from Array of Struct in Swift 3?
在从
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 } } |
以及该结构的数组:
1 | private var productsArray = [ProductObject]() |
当数组不为空时,然后我尝试在另一个类中打印它,它在调试器中显示:
1 | [app.cartclass.ProductObject(prodID:"2", prodName:"produk 2", prodPrice:"IDR 1000000", imageURL:"someURL", qty: 1, stock:"11", weight:"200")] |
该数组不是有效的
编辑:
这是我序列化为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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,则首先需要将自定义对象转换为
1 2 3 4 | 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 } |
现在使用此功能从自定义对象
1 2 | private var productsArray = [ProductObject]() let dicArray = productsArray.map { $0.convertToDictionary() } |
此处
1 2 3 4 | if let data = try? JSONSerialization.data(withJSONObject: dicArray, options: .prettyPrinted) { let str = String(bytes: data, encoding: .utf8) print(str) } |