使用 SwiftyJSON 从 JSON 读取数据时返回 Null
Posted
技术标签:
【中文标题】使用 SwiftyJSON 从 JSON 读取数据时返回 Null【英文标题】:Getting Null in return when reading data from JSON using SwiftyJSON 【发布时间】: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"]
【参考方案1】:
使用 SwiftyJSON 像这样下标:
var origin = readableJSONFromWeb["results","location"]
仅当整个路径由字典组成时才有效。
但是您的results
键包含一个数组,因此您必须传递要获取的数组项的索引。
从数组中获取第一项的示例:
var origin = readableJSONFromWeb["results",0,"location"]
结果:
"city" : "sittard-geleen",
"postcode" : 85004,
"street" : "4774 pieterskerkhof",
"state" : "flevoland"
【讨论】:
我得到了它的工作但不知道这个字典和数组的东西现在我明白了。感谢您的时间@EricD以上是关于使用 SwiftyJSON 从 JSON 读取数据时返回 Null的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftyJSON 框架读取本地声明的 JSON