2017-04-26 104 views
-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我一直在嘗試,但我可以找到它的每個例子都有一個標題,這就是他們如何能夠從字典中提取值。 –

回答

0

請閱讀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在斯威夫特沒有影響,但是這表明永遠不會消亡的教程。

0

目前代碼它看起來像你的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 
      } 
     } 
    } 
}