簡體   English   中英

如何在Swift 3中使用Struct數組生成JSON?

[英]How to Make JSON from Array of Struct in Swift 3?

我有問題從Swift3的struct數組生成JSON 我在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
    }
}

和該結構的數組:

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
}

現在使用此函數從自定義對象ProductObject Array生成字典數組。

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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM