2017-08-10 6 views
0

どうすればAnyタイプをキャストできますかJSONSerializationから辞書の配列に移動しますか?'Any'は '[[String:Any]]'に変換できません

let jsonArray: [[AnyHashable: Any]] 

    do { 

     jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: [.ReadingOptions.allowFragments]) as! [[AnyHashable : Any]] 
    } 
    catch { 
     let description = NSLocalizedString("Could not analyze earthquake data", comment: "Failed to unpack JSON") 
     print(description) 
     return 
    } 

しかし、コンパイラは私にエラーメッセージが表示できます::私のコードがある

P.S.:

'を任意の' 'は[任意] [AnyHashable]' に変換できません

JSONファイルは次のようになりますので、私は、辞書の配列を解析する必要があります。

[{ 
    "username": "admin", 
    "password": "123" 
}, { 
    "username": "bbvb", 
    "password": "3333" 
}, { 
    "username": "asd", 
    "password": "222" 
}] 
+0

JSONデータが破損しているか正しくない可能性がありますので、 ''としてオペレータとオプションの鋳物を使用し、力のキャストを使用しないでください?

はこれを試してみてください。また、JSON仕様によれば、JSONキーは 'String'でなければならないので、' AnyHashable'を辞書キーとして使用する理由はありません。しかし、実際のJSONレスポンスを見ることなく、正確なヘルプを表示することはできません。期待したJSONフォーマットを受け取っていない可能性があります。 –

+0

@DávidPásztor私はJSOnの例でポストを更新しました。 'AnyHashable'を 'String'に変更しても何も修正されません。データが破損した場合、 'do catch'はそれをキャッチしますので、オプションを使用する必要はありません。 – Shmidt

+1

これは当てはまりません。 do-catchブロックはthrow可能なエラーだけをキャッチしますが、強制キャスティングはキャッチできません。 do-catchブロックは、データをJSONにデコードすることができない場合にのみエラーをキャッチしますが、JSONは正しいフォーマットであるとは限りません。 –

答えて

1

なぜあなたはAnyHashableを使用しています?

let jsonArray: Any? = nil 

    do { 



jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [Any] 

     if jsonArray != nil { 
      if let resp = jsonArray as? [[AnyHashable : Any]]{ 

     //your result should be here inside resp, which is an array of dictionary of key-val type `AnyHashable : Any`, although you could just use String value for the key, making your format from [[AnyHashable : Any]] to [[String : Any]] 
     } 

    } 
    catch { 
      let description = NSLocalizedString("Could not analyze earthquake data", comment: "Failed to unpack JSON") 
      print(description) 
      return 
    } 
+0

申し訳ありませんが、 'AnyHashable'の何が問題なのですか?なぜ私はそれを使用できないのですか? – Shmidt

+0

コードが機能しません。 – Shmidt

+0

AnyHashableを使用できますが、キーがネストされた構造体である場合は、JSONの構造に依存します。 –

関連する問題