解析无标题的JSON Swift 3
问题描述:
我正在拉下json流吗?从一个虚拟服务器,我可以将数据解析出来并在xcode中打印。我需要提取具体的值,但json没有标题,我似乎无法弄清楚。解析无标题的JSON Swift 3
我的JSON数据
(
{
lat = "36.123450";
long = "-97.123459";
timestamp = "2017-04-26T05:55:15.106Z";
},
我在斯威夫特
let url = URL(string: "https://data.sparkfun.com/output/5JDdvbVgx6urREAVgKOM.json")
let task = URLSession.shared.dataTask(with: url!) {(data, response, error) in
if error != nil {
print("error")
} else {
if let content = data {
do {
// JSONArray
let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
print(myJson)
let Coordinates = myJson["lat"] as! [[String:Any]]
print(Coordinates)
} catch {
}
}
}
}
task.resume()
}
答
请阅读JSON。 []
代表一个数组,{}
一个字典。
JSON是一个字典数组。所有的密钥和值都是String
。
let url = URL(string: "https://data.sparkfun.com/output/5JDdvbVgx6urREAVgKOM.json")
let task = URLSession.shared.dataTask(with: url!) {(data, response, error) in
if error != nil {
print("error: ", error!)
} else {
do {
let coordinateArray = try JSONSerialization.jsonObject(with: data!) as! [[String:String]]
for coodinate in coordinateArray {
let lat = coodinate["lat"] ?? "n/a"
let long = coodinate["long"] ?? "n/a"
let timestamp = coodinate["timestamp"] ?? "n/a"
print("latitude: \(lat), longitude: \(long), timestamp: \(timestamp)")
}
} catch {
print (error)
}
}
}
task.resume()
与往常一样,.mutableContainers
在斯威夫特没有影响,但是这表明永远不会消亡的教程。
答
目前代码它看起来像你的JSON数据对象的数组,所以myJson
将是字典的数组。
我会尝试这样的事:
if let myJson = try JSONSerialization.jsonObject(with: content, options: []) as? [AnyObject] {
print(myJson)
for obj in myJson {
if let dict = obj as? [String:AnyObject] {
print(dict)
if let lat = dict["lat"] as? String,
let lng = dict["long"] as? String,
let time = dict["timestamp"] as? String {
// do something with stuff
}
}
}
}
lat只是s String。 – PeejWeej
你是什么意思,没有标题?你有一系列字典。迭代数组和每个字典,提取您需要的任何键值。 – rmaddy
@rmaddy我一直在尝试,但我可以找到它的每个例子都有一个标题,这就是他们如何能够从字典中提取值。 –