Ios 使用SwiftyJSON从JSON读取数据时返回Null

Ios 使用SwiftyJSON从JSON读取数据时返回Null,ios,json,swift,rest,swifty-json,Ios,Json,Swift,Rest,Swifty Json,我从两个地方读取JSON:1)从文件读取,2)从url读取。 这是我的JSON文件 { "People": { "Person1" : { "Name" : "Umair", "Age" : "22" }, "Person2" : { "Name" : "Rehman", "Age" : "28" }, "Person3" : { "Name" : "Saqib",

我从两个地方读取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"]

我得到的回报是空的

使用SwiftyJSON订阅如下内容:

var origin = readableJSONFromWeb["results","location"]
仅当整个路径由字典组成时才有效

但是您的
results
键持有一个数组,因此您必须传递要获取的数组项的索引

从数组中获取第一项的示例:

var origin = readableJSONFromWeb["results",0,"location"]
结果:

{
  "city" : "sittard-geleen",
  "postcode" : 85004,
  "street" : "4774 pieterskerkhof",
  "state" : "flevoland"
}

在远程访问中,当您获得一个包含JSON的NSData对象时,您意外地再次使用
NSData(contentsOfURL:url!)
从url读取数据。您不需要执行此操作-
会话。dataTaskWithURL
已在响应中返回了
NSData
。感谢您指出我的愚蠢错误。我尝试使用session.dataTaskWithURL返回的数据,但问题仍然是var origin=readableJSONFromWeb[“结果”]var data=origin[“位置”]@Sanjeet verma尝试了您的解决方案,但它仍然返回空值:-(我现在使用origin=readableJSONFromWeb[“结果”,0,“位置”,“邮政编码”]我让它工作了,但不知道这个dict和数组的东西,现在我明白了。谢谢你的时间@EricD