我试图找到这个位置'从下面的JSON,但它返回响应' nil'

时间:2017-08-09 13:50:18

标签: ios json swift get

我尝试从下面的JSON中获取<string name="app_name_with_at_string">\@string/app_name</string> ,但它返回响应location,您可以检查一次吗。 URL下面给出了响应,但我想从JSON下面显示位置。

nil

3 个答案:

答案 0 :(得分:0)

Foundation数据类型为NSDictionary时,不要使用Swift数据类型。您还需要将JSON强制转换为字典数组。但是,实际导致此问题的问题是LocationString而不是字典。

guard let myJsonArray = try JSONSerialization.jsonObject(with: content) as? [[String:Any]], let myJson = myJsonArray.first else {return}
print(myJson)
let val = myJson["Location"] as? String
print("val=\(val)")

答案 1 :(得分:0)

JSON的根对象显然是字典数组而不是某事AnyObject)。键Location的值位于数组的第一个对象

if let myJson = try JSONSerialization.jsonObject(with: content) as? [[String:Any]], !myJson.isEmpty { // check also that the array is not empty
   print(myJson)
   let val = myJson[0] // get first object of the array
   let location = val["Location"] as? String ?? "n/a"
   print("location = \(location)")
}

答案 2 :(得分:0)

您可以使用以下功能下载数据。此外,由于您的数组只有一个对象,因此要访问多个位置,您可以遍历数组对象

func downloadData(){
    let url = URL(string: "http://beta.json-generator.com/api/json/get/4ytNy-Nv7")

    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
        if error != nil
        {
            print ("ERROR")
        }
        else
        {
            if let content = data
            {
                do
                {
                    let myJson = try JSONSerialization.jsonObject(with: content) as? [[String:Any]]
                    let object = myJson?[0]
                    if let location = object?["Location"] as? String{
                        print(location)
                    }
                }
                catch
                {
                }
            }
        }
    }
    task.resume()
}