2016-12-29 14 views
1

GuideboxからSwiftを使用してJSONデータを解析しようとしています。データの例は、このようなものです:私は本当に必要なのは、「IDですと、:Guidebox APIからSwiftでJSONデータを解析する

{ 
    "results": [ 
    { 
     "id": 14673, 
     "title": "The Golden Girls", 
     "alternate_titles": [ 
     "Golden Palace" 
     ], 
     "container_show": 0, 
     "first_aired": "1985-09-14", 
     "imdb_id": "tt0088526", 
     "tvdb": 71292, 
     "themoviedb": 1678, 
     "freebase": "\/m\/01fszq", 
     "wikipedia_id": 217200, 
     "tvrage": { 
     "tvrage_id": 5820, 
     "link": "http:\/\/www.tvrage.com\/shows\/id-5820" 
     }, 
     "artwork_208x117": "http:\/\/static-api.guidebox.com\/120214\/thumbnails_small\/14673-9570342022-208x117-show-thumbnail.jpg", 
     "artwork_304x171": "http:\/\/static-api.guidebox.com\/120214\/thumbnails_medium\/14673-3759246217-304x171-show-thumbnail.jpg", 
     "artwork_448x252": "http:\/\/static-api.guidebox.com\/120214\/thumbnails_large\/14673-2249565586-448x252-show-thumbnail.jpg", 
     "artwork_608x342": "http:\/\/static-api.guidebox.com\/120214\/thumbnails_xlarge\/14673-6064109057-608x342-show-thumbnail.jpg" 
    } 
    ], 
    "total_results": 1, 
    "development_api_key": "You are currently using a temporary development API key. This API key is for testing only. You have used 57 of 250 available calls. Please see the API docs (http:\/\/api.guidebox.com\/apidocs) for additional information or to generate a production API key." 
} 

私の場合のために、データを使用する最も簡単な方法は、[任意の文字列]に変換するだろうと思われます"、" title "、アートワークの値が含まれます。しかし、私が使用した(無数の)メソッドはすべて、 "alternate_titles"がNSArrayとして解析され、すべてをより困難にするという事実のため失敗しています。この方法の これまでのところ、私が試したのバリエーション:

 do { 
     let jsonResult = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: Any] 
     let datafinal = jsonResult["results"] as! [String: Any] 
//Fails around here usually, when the data is converted to [String: Any] or [Any:Any] because of the array. 
     let title = datafinal["title"] 
     } catch { 
      print("JSON Preocessing failed") 
     } 

は、私はまた、より読みやすいJSONにデータを変換しようとするSwiftyJSONライブラリを使用しましたが、それは常に失敗からの方法は、辞書を引くために(私も構造のために推測している)。誰でも簡単な方法でURLからJSONデータを取得し、 "results"の値に簡単にアクセスできますか?どんな助けでも大歓迎です!

+0

を試してみてください? –

+0

これを試してください。{ jsonResult = JSONSerialization.jsonObjectを試してみましょう(data :, options:JSONSerialization.ReadingOptions.mutableContainers)を! [String:Any] datafinal = jsonResult ["results"]を!としましょう! NSArary //配列のためにデータが[String:Any]または[Any:Any]に変換されるとき、通常ここで失敗します。 LETタイトル= datafinal [0] .VALUE(forKey: "タイトル") プリント( "\(タイトル)") }キャッチ{ プリント( "JSON Preocessingに失敗しました") } ' –

+0

は、モデルクラスを作成し、解析しますオブジェクトマッパーを使用しています。 –

答えて

0

あなたはあなたの努力を共有することができ、この

do { 
    let jsonResult = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: Any] 
    let datafinal = jsonResult["results"] as! NSArary 

    let title = datafinal[0].value(forKey: "title") 
    print("\(title)") 
     } catch { 
      print("JSON Preocessing failed") 
     } 
+0

ソリューションに説明を追加できますか? – dirtydanee

+0

@dirtydanee私の理解では、彼は結果である1つのインデックス配列からTitleを取得したいだけです。次のステップでは、 'index 0'の配列内に辞書があり、キータイトル' let title = datafinal [0] .value(forKey: "title") 'の値を取得しています。申し訳ありません私の英語は非常に良いではない、あなたの答えはまた良いです。 :) –

0

arrayとしてfirst elementにアクセスし、Dictionaryと入力してください。

将来的には、hereは、データの構造をより簡単に確認することができ、このような問題がより早く現れる可能性がある優れたツールです。

do { 
    let jsonResult = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: Any] 
    guard let results = jsonResult["results"] as? [Any], let resultDictinary = results.first as? [String: Any] else { 
     fatalError("Data structure invalid") 
    } 
    let title = resultDictinary["title"] 
} catch { 
    print("JSON Preocessing failed") 
} 
+0

これはうまくいくと思いますが、ガードステートメントとそれがどのように設定されたかについてコンパイラに混乱がありました(私は2つのことがそれを混乱させると思います)。ありがとう、結構です!また、私はそのツールが大好きで、私の問題は主にアクセス方法に関するものでした。 –

+0

ああ、そうです! –

関連する問題