簡體   English   中英

如何在Swift 3中通過URL解析JSON數據

[英]How to parse through JSON data from URL in Swift 3

我正在嘗試遍歷從POST檢索到URL的JSON字典。 檢索數據並將其序列化為JSON對象后,我無法訪問數據的各個部分。

func retrieveLotStatus(lotNumber: String) {
    let allowedChars = (CharacterSet(charactersIn: "!*'();:@&=+$,/?%#-[] ").inverted)

    var url = URLRequest(url: URL(string: "fakeURLHere")!)
    let BodyData = "lotNum=" + lotNumber + "&field=" + PHASE.addingPercentEncoding(withAllowedCharacters: allowedChars)!
    url.httpMethod = "POST"
    url.httpBody = BodyData.data(using: .utf8)
    let task = URLSession.shared.dataTask(with: url) { data, response, error in
        guard let data = data, error == nil else {
            print(error?.localizedDescription ?? "No Data")
            return
        }
        let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
        print(responseJSON)
        if let jsonData = responseJSON as? [String: Any] {
            if let ItemNumber = jsonData["ItemNumber"] as? [String: Any] {
                print(ItemNumber)
            }
        }
    }
    task.resume()
}

這是打印響應以供參考時正在檢索什么JSON數據的示例

    Optional(<__NSArrayI 0x17d08c90>(
{
    Count = 4;
    ItemNumber = 1;
    PercentComplete = "100.00";
    Total = 4;
},
{
    Count = 1;
    ItemNumber = 10;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 10a;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 11;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 11a;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 4;
    ItemNumber = 1a;
    PercentComplete = "100.00";
    Total = 4;
},
{
    Count = 2;
    ItemNumber = 2;
    PercentComplete = "100.00";
    Total = 2;
},
{
    Count = 2;
    ItemNumber = 2a;
    PercentComplete = "100.00";
    Total = 2;
},
{
    Count = 1;
    ItemNumber = 3;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 3a;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 4;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 4a;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 5;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 5a;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 6;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 6a;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 7;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 7a;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 8;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 8a;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 9;
    PercentComplete = "100.00";
    Total = 1;
},
{
    Count = 1;
    ItemNumber = 9a;
    PercentComplete = "100.00";
    Total = 1;
}
)
)

我試圖遍歷每個對象,並將值附加到表中。 但是,在嘗試將它們格式化為UITableCell之前,我試圖簡單地讀取每個responseJSON [“ ItemNumber”],responseJSON [“ Count”],responseJSON [“ Total”]和responseJSON [“ PercentComplete”]

問題是您試圖將字典數組轉換為字典。

if let jsonData = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [[String:Any]] {
    for item in jsonData {
        if let itemNumber = item["ItemNumber"] as? Int, let count = item["Count"] as? Int, let percentComplete = item["PercentComplete"] as? Double, let total = item["Total"] as? Int {
            //use data
        }
    }
}

還要確保遵循Swift命名約定,該約定對於變量來說是小寫的。

暫無
暫無

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

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