2017-06-04 8 views
-3

JSONをすばやく使って作業するのは非常に混乱します。アップル12月に に従って:https://developer.apple.com/swift/blog/?id=37スウィフトでjsonで作業するのが非常に混乱しています

/* 
    { 
     "someKey": 42.0, 
     "anotherKey": { 
     "someNestedKey": true 
     } 
    } 
*/ 

このjsonWithObjectRoot JSON文字列をフォーマットする整形方法は何ですか? 私はservalの方法を試みたが成功した。

このようにして、これらのメソッドはそれにアクセスできます。

if let dictionary = jsonWithObjectRoot as? [String: Any] { 
    if let number = dictionary["someKey"] as? Double { 
     // access individual value in dictionary 
    } 

    for (key, value) in dictionary { 
     // access all key/value pairs in dictionary 
    } 

    if let nestedDictionary = dictionary["anotherKey"] as? [String: Any]  { 
     // access nested dictionary values by key 
    } 
} 

答えて

0

あなたのjsonはうまく見えます。 [String:Any]にキャストする前に解析する必要があります。

let jsonWithObjectRoot = "{ \"someKey\": 42.0, \"anotherKey\": { \"someNestedKey\": true } }" 
let data = jsonWithObjectRoot.data(using:.utf8)! 
do { 
    let json = try JSONSerialization.jsonObject(with:data) 
    if let dictionary = json as? [String: Any] { 
     if let number = dictionary["someKey"] as? Double { 
      // access individual value in dictionary 
     } 

     for (key, value) in dictionary { 
      // access all key/value pairs in dictionary 
     } 

     if let nestedDictionary = dictionary["anotherKey"] as? [String: Any]  
     { 
      // access nested dictionary values by key 
     } 
    } 
} catch { 
    print("Error parsing Json") 
} 
+0

回答ありがとうございました。私は誤解していると思う。だからjsonWithObjectRoot.dataです.dataはjsonWithObjectRootをJSON形式でエンコードするメソッドで、JSONSerializationメソッドの後に辞書にエンコードしますが、正しく理解できましたか? – Tony

+0

.data()メソッドはStringからDataに変換していません。データはメモリブロックを記述する。データから解析されたオブジェクトへの変換は、JSONSerialization.jsonObject()によって行われます。この結果は辞書としてキャストできます。一般に、Webからデータを受け取るときは、Dataクラスの形式になっているので、Stringデータの変換は必要ありません。 – Spads

+0

もう一度ありがとう。したがって、プロセスはjson-> data(jsonWithObjectRoot.data) - > dicktionary(JSONSerialization)ですか? – Tony

関連する問題