2017-04-26 12 views
-3

Ich ziehe einen json Strom herunter? Von einem Phant-Server kann ich die Daten runterziehen, analysieren und in xcode ausdrucken. Ich muss bestimmte Werte herausziehen, aber der JSON hat keinen Titel und ich kann es nicht herausfinden.Parse JSON ohne Titel Swift 3

Meine JSON Daten

(
    { 
    lat = "36.123450"; 
    long = "-97.123459"; 
    timestamp = "2017-04-26T05:55:15.106Z"; 
}, 

Meine aktuellen Code in Swift

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 ist nur s String. – PeejWeej

+2

Was meinst du, es gibt keinen Titel? Sie haben eine Reihe von Wörterbüchern. Iterieren Sie das Array und extrahieren Sie für jedes Wörterbuch die gewünschten Schlüsselwerte. – rmaddy

+0

@rmaddy Ich habe versucht, aber jedes Beispiel, das ich finden kann, hat einen Titel und das ist, wie sie Werte aus dem Wörterbuch extrahieren konnten. –

Antwort

0

Bitte lesen Sie die JSON. [] repräsentiert ein Array, {} ein Wörterbuch.

Der JSON ist ein Array von Wörterbüchern. Alle Schlüssel und Werte sind 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() 

Wie immer hat .mutableContainers keine Wirkung in Swift aber die Tutorials, die das Absterben nie vermuten lässt.

0

Es sieht aus wie Ihre JSON-Daten ist ein Array von Objekten, so wird myJson eine Reihe von Wörterbüchern sein.

würde ich so etwas wie dies versuchen:

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 
      } 
     } 
    } 
}