【发布时间】:2016-05-24 07:34:08
【问题描述】:
我正在从两个地方读取 JSON:1) 从文件和 2) 从 url。 这是我的 JSON 文件
{
"People": {
"Person1" : {
"Name" : "Umair",
"Age" : "22"
},
"Person2" : {
"Name" : "Rehman",
"Age" : "28"
},
"Person3" : {
"Name" : "Saqib",
"Age" : "32"
},
"Person4" : {
"Name" : "Fahad",
"Age" : "18 "
},
}
}
这就是我使用 SwiftyJson 阅读它的方式
let path: String = NSBundle.mainBundle().pathForResource("jsonFile", ofType: "json") as String!
let jsonData = NSData(contentsOfFile: path) as NSData!
let readableJSON = JSON(data: jsonData, options: .MutableContainers, error: nil)
var myName = readableJSON["People","Person1","Name"]
print(myName)
结果它给我的名字在这里没有问题。当我尝试使用相同的方法从 url 获取 Json 时,我得到了完整的 Json 文件作为回报,但是当我尝试获取特定字段时,它返回 null。这是我的代码
let url = NSURL(string: "http://api.randomuser.me/")
let session = NSURLSession.sharedSession()
session.dataTaskWithURL(url!, completionHandler: { ( data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
// Make sure we get an OK response
guard let realResponse = response as? NSHTTPURLResponse where
realResponse.statusCode == 200 else {
print("Not a 200 response")
return
}
// Read the JSON
let readableJSONFromWeb = JSON(data: data!, options: .MutableContainers, error: nil)
var origin = readableJSONFromWeb["results"]
print(origin)
}).resume()
}
按照上面的代码,我得到了这个输出
Umair
[
{
"id" : {
"name" : "SSN",
"value" : "026-36-3780"
},
"nat" : "US",
"cell" : "(862)-296-4803",
"phone" : "(528)-560-7652",
"login" : {
"username" : "ticklishmouse295",
"password" : "julie",
"sha256" : "01234103cae3a10c5813a7c5dfd069e2533860cf2786df4dc31a501eb66b9c37",
"sha1" : "46fa91a26c5219823b0c4a2c0fd99d390c997cd9",
"salt" : "aU4VTMOV",
"md5" : "be3f89edd4f22f333433d2424cbf4a95"
},
"registered" : 1144149087,
"dob" : 1170844810,
"picture" : {
"large" : "https:\/\/randomuser.me\/api\/portraits\/women\/40.jpg",
"thumbnail" : "https:\/\/randomuser.me\/api\/portraits\/thumb\/women\/40.jpg",
"medium" : "https:\/\/randomuser.me\/api\/portraits\/med\/women\/40.jpg"
},
"location" : {
"state" : "north carolina",
"street" : "9402 mcclellan rd",
"city" : "arvada",
"postcode" : 93836
},
"email" : "ethel.palmer@example.com",
"gender" : "female",
"name" : {
"title" : "mrs",
"first" : "ethel",
"last" : "palmer"
}
}
]
但是当我尝试使用某个特定字段时
var origin = readableJSONFromWeb["results","location"]
我得到 null 作为回报
【问题讨论】:
-
在你的远程访问中,你得到一个包含 JSON 的 NSData 对象,你不小心再次从带有
NSData(contentsOfURL:url!)的url读取数据。您不需要这样做 -session.dataTaskWithURL已经在响应中返回了NSData。 -
感谢您指出我的愚蠢错误。我尝试使用 session.dataTaskWithURL 返回的数据,但问题仍然存在
-
var origin = 可读JSONFromWeb["results"] var data = origin["location"]
-
@Sanjeet verma 尝试了您的解决方案,但它仍然返回 null :-(
-
我现在使用 origin = readableJSONFromWeb["results",0,"location","postcode"]
标签: ios json swift rest swifty-json