Lut*_*man 2 arrays serialization json swift swift3
我有一个问题是JSON从一个struct数组中生成一个Swift3.我搜索过Stack Overflow,没有什么可以帮助我(这里是截图).我struct喜欢这样的:
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
}
}
Run Code Online (Sandbox Code Playgroud)
和该结构的数组:
private var productsArray = [ProductObject]()
Run Code Online (Sandbox Code Playgroud)
当数组不为空,然后我尝试在另一个类中打印它时,它会在调试器中显示:
[app.cartclass.ProductObject(prodID: "2", prodName: "produk 2", prodPrice: "IDR 1000000", imageURL: "someURL", qty: 1, stock: "11", weight: "200")]
Run Code Online (Sandbox Code Playgroud)
该数组无效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");
}
Run Code Online (Sandbox Code Playgroud)
Nir*_*v D 11
如果你想从自定义对象制作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
}
Run Code Online (Sandbox Code Playgroud)
现在使用此函数从自定义对象的Array生成字典数组ProductObject.
private var productsArray = [ProductObject]()
let dicArray = productsArray.map { $0.convertToDictionary() }
Run Code Online (Sandbox Code Playgroud)
这dicArray是由类型组成的[[String:Any]],现在您可以使用它JSONSerialization来生成JSON字符串dicArray.
if let data = try? JSONSerialization.data(withJSONObject: dicArray, options: .prettyPrinted) {
let str = String(bytes: data, encoding: .utf8)
print(str)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3757 次 |
| 最近记录: |