我正在花时间了解使用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;
};
}
由于
答案 0 :(得分:10)
在Swift 3中,JSONSerialization.jsonObject(with:options:)
的返回类型已变为Any
。
(您可以在Xcode的“快速帮助”面板中查看它,并指向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"])
}
答案 1 :(得分:0)
谢谢。来自OOPer的信息有所帮助。但是,真正有用的是重新格式化我的json:
{ "teams": [ { "a": 1, "b": 2, "c": "red" }, { "a": 1, "b": 2, "c": "yellow" }, { "a": 1, "b": 2, "c": "green" } ] }