2017-04-21 3 views
1

Ich habe JSON-Datei von dieser URL heruntergeladen https://raw.githubusercontent.com/David-Haim/CountriesToCitiesJSON/master/countriesToCities.jsonWie kann ich JSON-Datei ohne Schlüssel analysieren?

ich stecken geblieben, nachdem ich alle JSON-Datei in let json

let requestURL: NSURL = NSURL(string: "https://raw.githubusercontent.com/David-Haim/CountriesToCitiesJSON/master/countriesToCities.json")! 
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithRequest(urlRequest) { 
     (data, response, error) -> Void in 

     let httpResponse = response as! NSHTTPURLResponse 
     let statusCode = httpResponse.statusCode 

     if (statusCode == 200) { 

      do{ 

       let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) 

       print (json) 
      }catch { 
       print("Error with Json: \(error)") 
      } 

     } 
    } 

    task.resume() 

} 

Das Problem analysieren I in jedes Land und jeder Stadt drehen kann nicht, weil ich weiß nicht, Schlüssel-> Wert. Wie kann ich mich an jedes Land und jede Stadt wenden?

+0

Mögliche Duplikat [Iterieren Durch ein Wörterbuch in Swift] (http://stackoverflow.com/questions/24111627/iterating-through-a -dictionary-in-swift) – dmorrow

+1

Anzeigen der Swift-Dokumente https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8- ID113 * Iterieren über ein Wörterbuch * – dmorrow

Antwort

0

Hier einige Swift Spielplatz-Code, der genau das tut, was Sie wollen:

//: Playground - noun: a place where people can play 
import UIKit 
import PlaygroundSupport 

PlaygroundPage.current.needsIndefiniteExecution = true 

let urlStr = "https://raw.githubusercontent.com/David-Haim/CountriesToCitiesJSON/master/countriesToCities.json" 

let requestURL: URL = URL(string: urlStr)! 
let urlRequest: URLRequest = URLRequest(url: requestURL) 
let session = URLSession.shared 
let task = session.dataTask(with: urlRequest) { 
    (data, response, error) -> Void in 

    let httpResponse = response as! HTTPURLResponse 
    let statusCode = httpResponse.statusCode 

    if (statusCode == 200) { 
     do{ 
      let json:[String:[String]] = try! JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! Dictionary 
      for (country, cities) in json { 
       print(country) 
       for city in cities { 
        print("City in \(country): \(city)") 
       } 
      } 


     }catch { 
      print("Error with Json: \(error)") 
     } 

    } else { 
     print("Other status: \(statusCode)") 
    } 
} 

task.resume() 

Der Schlüssel ist das Format der Daten zu kennen, in diesem Fall ein Wörterbuch String Schlüssel und Array von String Werten. Wenn Sie Ihre json Variable deklarieren, warf sie zu dem, was es tatsächlich ist:

let json:[String:[String]] = try! JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! Dictionary 
+0

Es funktioniert. Vielen Dank. Jetzt ist es klar für mich –

0

In dieser Antwort haben Sie alles was Sie brauchen, um alle Daten über Land und Städte zu finden.

Sie haben eine Antwort, die Wörterbuch [String:[String]] Typ ist.

Beispiel:

Ein Teil der Antwort:

let json = ["Eritrea":["Asmara",""],"Cuba":["Havana","Habana","La Habana","Matanzas","Villa","Bayamo","Cienfuegos","Santiago de Cuba","Holguín","Ciego de Ãvila","Pinar del Río","Sancti Spíritus","Camagüey","Las Tunas","Guantánamo","Varadero"],"Saint Helena":["Tristan Da Cunha","Jamestown"],"Christmas Island":["Flying Fish Cove"],"Ethiopia":["Addis Ababa","Awasa","Jijiga"],"British Indian Ocean Territory":[""]] 

Also, wenn Sie alle Ländernamen holen möchte nur wie folgt tun:

let keys = Array(json.keys) 

Wenn Sie holen möchten Städte zum Beispiel für Eritrea tun es wie folgt:

let cityes = json["Eritrea"] 
Verwandte Themen