这篇文章是在一篇旧文章之后发布的,其中有些人帮我解决了类似的问题。
我目前正在开发一个应用程序,它通过向web服务发出请求来列出用户对象,该服务以这种格式发送JSON响应:
{
"objects": [
{
"id": "28",
"title": "test",
"price": "56 €",
"description": "kiki",
"addedDate": "11-07-2015",
"user_id": "1",
"user_name": "CANOVAS",
"user_zipCode": "69330",
"category_id": "1",
"category_label": "VEHICULES",
"subcategory_id": "1",
"subcategory_label": "Voitures",
"picture": "",
"bdd": {},
"picture_url": "http://jdl-barreme-orange.dyndns.org/WEBSERVICE/pictures/test.JPG"
},
{
"id": "27",
"title": "ferrari",
"price": "55 €",
"description": "rouge jantes",
"addedDate": "11-07-2015",
"user_id": "1",
"user_name": "CANOVAS",
"user_zipCode": "69330",
"category_id": "1",
"category_label": "VEHICULES",
"subcategory_id": "1",
"subcategory_label": "Voitures",
"picture": "",
"bdd": {},
"picture_url": "http://jdl-barreme-orange.dyndns.org/WEBSERVICE/pictures/ferrari.JPG"
}
}
我搜索一个方法,为每个字典检索值标题和价格,并将它们放在tableView中。
我使用的代码(tableviewcontroller):
if let jsonArray = NSJSONSerialization.JSONObjectWithData(urlData!, options: nil, error: nil) as? [[String:AnyObject]] {
for dict in jsonArray {
if let title = dict["title"] as? String {
println(title)
}
}
}
但它不起作用,我放了一个断点,Xcode停在这里解释:
for dict in jsonArray
感谢您的帮助。
答案 0 :(得分:2)
此示例JSON无效:它在最后]
之前缺少}
。
但我想这只是一个粘贴错误,你正在使用的JSON格式正确,所以你的问题是你需要先访问你字典的objects
键。
此键包含字典数组的值,因此我们将其用作类型转换:
if let json = NSJSONSerialization.JSONObjectWithData(urlData!, options: nil, error: nil) as? [String:AnyObject] {
if let objects = json["objects"] as? [[String:AnyObject]] {
for dict in objects {
if let title = dict["title"] as? String {
println(title)
}
}
}
}
首先我们将NSJSONSerialization.JSONObjectWithData
的结果转换为字典:[String:AnyObject]
,然后我们访问objects
键的值,然后我们将此值转换为字典数组:{ {1}}。
请记住,使用JSON格式,字典的格式为[[String:AnyObject]]
,数组的格式为{}
。
你的例子是[]
所以它是一个包含字典数组的字典。
Swift 2.0更新
{key:[{},{}]}
答案 1 :(得分:1)
试试这个:
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary
var DataFromJSon = jsonResult["objects"] as! NSArray
for one in DataFromJSon {
var title = one["title"] as! String
println(title)
}