2016-12-06 68 views
2

我有一个问题,从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"); 
    } 
+0

为什么不用wana使用类代替struct? –

+0

@ShobhakarTiwari @ShobhakarTiwari因为在类cartclass有很多其他的事情要做 –

+0

然后使用nsjsonserialization将其转换成json数据 –

回答

8

如果你想从自定义对象的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来从这个dicArrayJSON字符串。

if let data = try? JSONSerialization.data(withJSONObject: dicArray, options: .prettyPrinted) { 
    let str = String(bytes: data, encoding: .utf8) 
    print(str) 
} 
+0

它的工作!所以,我翻译成Dictionary的方式是错误的。非常感谢你! –

+0

@LuthfiRahman欢迎伴侣:) –