簡體   English   中英

(Swift) 如何用結構體解析 JSON?

[英](Swift) How to parse JSON with struct?

我想用 struct 解析 JSON 並命名它。

這是 JSON 數據:

{
"sgList": [
    {
        "ID": 11113,
        "Name": "soss",
        "Price": "10.0000",
        "BigImagesUrl": "http://192.165.1.19:886/img/1/2015/7/11/20157111429315728.png",
        "SmallImagesUrl": "http://192.165.1.19:886/img/1/2015/7/11/20157111429315728.png"
    },
    {
        "ID": 11958,
        "Name": "1017p-02",
        "Price": "0.0000",
        "BigImagesUrl": "http://192.165.1.13:886/img/rar-upload/f82f22ce-4a33-4ba2-a31d-4bae473f5d48/pics/797_1.jpg",
        "SmallImagesUrl": "http://192.165.1.13:886/img/rar-upload/f82f22ce-4a33-4ba2-a31d-4bae473f5d48/pics/797_1-[135-135].jpg"
    }
]
}

我花了幾個小時在上面卻一無所獲! 請幫幫我,非常感謝!

如果您不想要第三方庫而自己動手,這很容易。 假設您的 JSON 字符串位於名為jsonString的變量中

let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding)!
let json = try! NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments)

然后您可以通過 subsript 訪問您的數據。 例如,如果您想要sgList 中第二個對象的名稱

json["sgList"][1]["Name"]

你可以使用SwiftyJSON做這樣的事情:

import SwiftyJSON

struct SqList {
    let sqList: Array<SqElement>

    init(json: JSON) {
       let sqArray = json["sqList"].arrayValue.flatMap { SqElement(json: $0) } 
       self.sqList = sqArray
    }
}

struct SqElement {
    let id: String
    let name: String
    let price: String
    let bigImagesUrl: String
    let smallImagesUrl: String

    init?(json: JSON) {
        guard
            let id = json["ID"].string,
            let name = json["Name"].string,
            let price = json["Price"].string,
            let bigImagesUrl = json["BigImagesUrl"].string,
            let smallImagesUrl = json["SmallImagesUrl"].string
        else { return nil }

        self.id = id
        self.name = name
        self.price = price
        self.bigImagesUrl = bigImagesUrl
        self.smallImagesUrl = smallImagesUrl
    }
}

在代碼中,您只需調用:

let sqList = SqList(json: JSON(data: dataWithJSON))

暫無
暫無

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

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