使用Swift 3进行JSON序列化

9

我在理解Swift 3中简单的JSON序列化原理方面遇到了困难。能否帮我将网站上的JSON解码成数组,以便我可以访问像jsonResult["team1"]["a"]这样的内容?以下是相关代码:

let httprequest = URLSession.shared.dataTask(with: myurl){ (data, response, error) in

self.label.text = "RESULT"

    if error != nil {

        print(error)

    } else {

        if let urlContent = data {

            do {

                let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: 
                    JSONSerialization.ReadingOptions.mutableContainers)

                print(jsonResult) //this part works fine

                print(jsonResult["team1"])

                } catch {

                    print("JSON Processing Failed")
                }
            }
        }
    }
    httprequest.resume()

传入的 JSON 数据如下:

{
team1 = {
    a = 1;
    b = 2;
    c = red;
};

team2 = {
    a = 1;
    b = 2;
    c = yellow;
};
team3 = {
    a = 1;
    b = 2;
    c = green;
};
}

谢谢

2个回答

10
在Swift 3中,JSONSerialization.jsonObject(with:options:)的返回类型已经变成了Any。(你可以在Xcode的Quick Help面板上检查它,并指向jsonResult。)并且,你不能为以Any类型编写的变量调用任何方法或下标。你需要进行显式类型转换才能使用Any
    if let jsonResult = jsonResult as? [String: Any] {
        print(jsonResult["team1"])
    }

而且NSArray的默认元素类型,NSDictionary的默认值类型也已经变成了Any。(所有这些东西都简称为“id-as-Any”,SE-0116。)

因此,如果你想深入了解JSON结构,可能需要进行其他显式类型转换。

        if let team1 = jsonResult["team1"] as? [String: Any] {
            print(team1["a"])
            print(team1["b"])
            print(team1["c"])
        }

0

谢谢。OOPer提供的信息很有帮助。但是,真正帮助我的是重新格式化我的JSON:

{ "teams": [ { "a": 1, "b": 2, "c": "red" }, { "a": 1, "b": 2, "c": "yellow" }, { "a": 1, "b": 2, "c": "green" } ] }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接