我正试图从调用web服务的结果填充UITableView。数据以JSON格式返回,如下所示
[{"name":"CONTROL TEST",
"nc_lead":"TOM SMITH",
"datastr":"N/A",
"username":"tsmith",
"status":"REOPENED",
"orderno":"00000000",
"ccsText":"000",
"risk":0,
"dateTimeCreated":"2016-01-29 13:16:50",
"supplyStart":"2016-02-08T11:51:00+0000",
"supplyEnd":"2016-02-08T12:03:00+0000",
"logs":
[{"dateTime":"2016-02-02 11:26:18",
"statusChangeDateTime":"2016-02-02 00:00:00",
"user":"tsmith",
"uid":1,
"task":"TESTING",
"info":"state changed to 'Y'",
"x":456123,
"y":362514,
"id_log":28294},
{“dateTime":"2016-02-02 10:54:34",
"statusChangeDateTime":"2016-02-02 10:54:00",
"user":"tsmith",
"uid":1,
"task":"TESTING",
"info":"T Smith changed area.",
"x":452356,
"y":325489,
"id_log":28291
},.....
没有键,因为第一部分由12个值组成,作为头,然后日志为每个头形成一个值数组。我使用下面的代码返回JSON对象,解析来自web服务调用的数据对象。
let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
我可以使用下面的代码看到数据的返回值
let str = NSString(data: data!, encoding: NSUTF8StringEncoding)
然后我尝试使用下面的代码来提取“name”的值,但它不起作用
if let name = json["name"] as? [[String: AnyObject]] {}
如何遍历json对象以从头和日志数组中获取数据?
最佳答案
似乎json
对象是字典数组,所以您应该执行以下操作:
if let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) as? Array<Dictionary<String, AnyObject>> {
for item in json {
if let dict = item as? Dictionary<String, AnyObject> {
print(dict["name"])
}
}
}
转换应该是
AnyObject
,因为有时值是String
,例如dict["name"] == "CONTROL TEST"
,但dict["logs"]
是Array<Dictionary<String, String>>
。你看到了吗?