我尝试从下面的JSON中获取<string name="app_name_with_at_string">\@string/app_name</string>
,但它返回响应location
,您可以检查一次吗。 URL下面给出了响应,但我想从JSON下面显示位置。
nil
答案 0 :(得分:0)
当Foundation
数据类型为NSDictionary
时,不要使用Swift
数据类型。您还需要将JSON
强制转换为字典数组。但是,实际导致此问题的问题是Location
是String
而不是字典。
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()
}