2017-09-22 16 views
0

JSONは次のようになります。あなたがそうで "00AK"、 "00AL"、 "00AZ" に変化し、キーを見ることができるように異なるキーでJSONからデータを取得するにはどうすればよいですか?

{ 
"00AK": { 
    "icao": "00AK", 
    "iata": "", 
    "name": "Lowell Field", 
    "city": "Anchor Point", 
    "country": "US", 
    "elevation": 450, 
    "lat": 59.94919968, 
    "lon": -151.695999146, 
    "tz": "America\/Anchorage" 
}, 
"00AL": { 
    "icao": "00AL", 
    "iata": "", 
    "name": "Epps Airpark", 
    "city": "Harvest", 
    "country": "US", 
    "elevation": 820, 
    "lat": 34.8647994995, 
    "lon": -86.7703018188, 
    "tz": "America\/Chicago" 
}, 
"00AZ": { 
    "icao": "00AZ", 
    "iata": "", 
    "name": "Cordes Airport", 
    "city": "Cordes", 
    "country": "US", 
    "elevation": 3810, 
    "lat": 34.3055992126, 
    "lon": -112.1650009155, 
    "tz": "America\/Phoenix" 
} 
} 

。この形式のJSONを解析するにはどうすればよいですか?

+0

参照してください - https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types – user1046037

+0

何のキーを解析するために重要ではありませんの?他の人と同じようにjsonを解析するだけで、実際の質問はどのように解析されたjsonからデータを取得するのですか? – luk2302

+0

Googleの検索キーワードjsonObjectを使用して検索できます。そこにはたくさんのサンプルがあります。がんばろう! –

答えて

0
let jsonData = //JSON DATA HERE 
do { 
    let dict = try NSJSONSerialization.JSONObjectWithData(jsonData, options: []) as! NSDictionary 
    for (key, value) in dict { 
     let subDict = value as! NSDictionary 
     //Then you can access the values from subDict 
    } catch { 
     //ERROR HANDLING  
    } 
+1

SwiftでNSDictionaryを使うべきではなく、 '[String:Any]'のようなSwift辞書を使うのが良いでしょう。また、キャストを強制するのではなく、キャスティングの失敗を処理する必要があります。 – Moritz

+0

合意。私はちょうどプロセスの基本的な要点を与えていた。 – Malik

0

だからここでは、私はその後、その後、応答ディクショナリからキーのリストを取る応答結果に

var listOfModels = Array<Model>() 

を保持するために、アレイ上の宣言

struct Model { 
var iaco: String? 
var iata: String? 
var name: String? 
var city: String? 
var country: String? 
var elevation: Int? 
var lat: Double? 
var lon: Double? 
var tz: String? } 

を以下のように、1つの構造を宣言し、それを反復して結果を得て配列に格納する

handleResponse { (response) in 
     for key in response.keys { 
      let dict = response[key] as? [String:Any] 
      var model = Model() 
      model.iaco = dict?["icao"] as? String 
      model.iata = dict?["iata"] as? String 
      model.name = dict?["name"] as? String 
      model.city = dict?["city"] as? String 
      model.country = dict?["country"] as? String 
      model.elevation = dict?["elevation"] as? Int 
      model.lat = dict?["lat"] as? Double 
      model.lon = dict?["lon"] as? Double 
      model.tz = dict?["tz"] as? String 
      listOfModels.append(model) 
     } 
    } 

response.keysは、辞書からキーのリストを取得するために使用されます。

0

あなたは以下のスニペット試みることができる:

func parseData() { 
    let jsonData = Data() /// your actual response data goes here... 
    do { 
     let dict = try JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) 
     guard let swiftDict = dict as? [String : Any] else { 
      print("Not a valid response") 
      return 
     } 

     for (key, value) in swiftDict { 
      guard let valueDict = value as? [String: Any] else { 
       /// handle improper response here 
       return 
      } 

      /// Got the actual dictionary in 'valueDict'... 
     } 
    } 
    catch { 
      /// handle parsing error here 
    } 

} 
関連する問題