解析无标题的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() 

} 
+0

lat只是s String。 – PeejWeej

+2

你是什么意思,没有标题?你有一系列字典。迭代数组和每个字典,提取您需要的任何键值。 – rmaddy

+0

@rmaddy我一直在尝试,但我可以找到它的每个例子都有一个标题,这就是他们如何能够从字典中提取值。 –

请阅读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 
      } 
     } 
    } 
}