arrays - 如何从 Swift 3 中的结构数组生成 JSON?

标签 arrays json swift serialization swift3

我在从 Swift3 中的结构数组创建 JSON 时遇到问题。我在 Stack Overflow 中搜索,没有任何帮助(这里是 screenshot)。我有一个像这样的 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
    }
}

以及该结构的数组:

private var productsArray = [ProductObject]()

当数组不为空时,然后我尝试在另一个类中打印它,它在调试器中显示如下:

[app.cartclass.ProductObject(prodID: "2", prodName: "produk 2", prodPrice: "IDR 1000000", imageURL: "someURL", qty: 1, stock: "11", weight: "200")]

该数组不是有效的 JSON 对象。如何使它成为有效的 JSON 对象?我想知道“app.cartclass.ProductObject”这部分是否是一个问题,是否要使其成为有效的 JSON 对象

编辑:

下面是我如何序列化为 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
}

现在使用此函数从自定义对象数组 ProductObject 生成字典数组。

private var productsArray = [ProductObject]()
let dicArray = productsArray.map { $0.convertToDictionary() }

这里的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)
}

关于arrays - 如何从 Swift 3 中的结构数组生成 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40989483/

相关文章:

javascript - Mongodb将文档推送到嵌套在对象值中的数组中

ios - 在 Swift 中创建默认样式的 UIButton

javascript - 为什么传递给 for 循环内的函数的 'i' 等于大于 'i' 的数字?

java - 类型不匹配 : cannot convert from String to Uri

java - Double 需要 Jackson 序列化程序,并且需要在运行时指定精度

ios - 将 UIPickerView 放置在 UIAlertController 的中心

objective-c - 使用 Objective-C 宏访问 Swift 中的 UIView 帧测量

ios - 使用 UISwitch 从数组中删除对象

c++根据随机生成的数组检查用户输入的值

c++ - 在 C++ 中, vector 是按值传递还是通过引用传递给函数