私はInstagram APIからJSON応答を解析しています。最上位のオブジェクトにはメタデータがいくつか含まれており、興味のあるエントリは「データ」という配列オブジェクトに含まれています。Swift 3のJSONを解析するAppleのSwift 2の例のように
Appleの投稿hereは、Swift 2を使用し、Swift 3がリリースされる前の日に公開されました(私は信じています)。このポストは非常に役に立ち、私が辞書として興味を持っているアイテムを手に入れるために使っているのと同じパターンを持っています。 JSONも非常に似ています。
let session = URLSession.shared
let task = session.dataTask(with: mediaURL(), completionHandler: { (data, response, error) in
if let data = data,
let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
for case let items in json["data"] {
// parse each item
}
}
コンパイラはエラー「タイプスロー:ここ
はコードである '[文字列:任意]を?'行にはfor case let items in json["data"] {
の下付き文字のメンバーはありません。 if let
チェーンの変数json
には、タイプ[String: Any]?
が与えられます。これを避けて、バインディングを構造化して、json
変数に辞書[String: Any]
を入力することができますか?
JSONを解析する方法についてはお尋ねしていません。という事は承知しています。 Appleのポストは、この記事で私は、コードを更新する方法を理解したいと思い、私が使用したい正確なパターンであるスウィフト3に
UPDATE:以下のコメントからの入力に
おかげで、I私が使っていたタイプを詳しく調べました。私はフレームワークを使用することができ
let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
let items = json["data"] as? [[String: Any]] {
for item in items {
if let mediaType = item["type"] as? String,
let mediaID = item["id"] as? String,
let images = item["images"] as? [String: Any],
let standardImg = images["standard_resolution"] as? [String: Any],
let standardImgURL = standardImg["url"] as? String {
// Create instances with JSON data…
が、これは私が解析について少し詳細を学ぶ助けになるJSONを返しました:私のJSONは、辞書の配列の辞書の配列がたくさんあったので、私はそれを解析するために、このコードを使用しましたシンプルなフラット値だけでなく、重く入れ子になっています。 (try?
で)今
let json: [String: Any] = try? JSONSerialization.jsonObject(...) as? [String: Any] {
for case let items in json["data"] {
// parse each item
}
}
エラーです:あなたは、明示的なjson
の所望のタイプを作る代わりに、どのような型推論を通じてウェーディングすることで、より有用なエラーメッセージを取得することができます
'' json ["data"] 'の期待値の型が何であるかをコンパイラに伝えなければなりません。 – vadian
'try?'のためにオプションになっていますので、このようにしてください 'let json = (JSONSerialization.jsonObject(with:data、options:[])) [String:Any] {'また、' json ["data"] ' –
のタイプを指定する必要があります。私はコンパイラがSwift 2の型を推論できる理由を理解していません。(Appleの例にはその型の 'json [" data "]の型は含まれておらず、正しく型が推測されています。私は思った。 – aaronfalls