2015-06-10 186 views
1

我有一本需要轉換爲Json的字典詞典。將嵌套字典轉換爲json swift

[ 
    Dict1:1, 
    test: A Value, 
    NestedDict1:[ 
     city: A City Name, 
     address: An Address, 
     NestedDict2: [ 
      1: 1, 
      39: 2 
     ], 
     favorite1: 2, 
     favorite3: Chocolate 
    ] 
] 

當我使用

NSJSONSerialization.dataWithJSONObject(myJsonDict, options: NSJSONWritingOptions.PrettyPrinted, error: nil) 

僅編碼最外面的字典。所以我的輸出如下所示:

{ 
    "Dict1":"1", 
    "test": "A Value", 
    "NestedDict1":"[ 
     city: A City Name, 
     address: An Address, 
     NestedDict2: [ 
      1: 1, 
      39: 2 
     ], 
     favorite1: 2, 
     favorite3: Chocolate 
    ]" 
} 

我該如何JSON內部字典呢?

+0

儘量不要通過'.PrettyPrinted'爲'選項:「論點? – nhgrif

+0

http://stackoverflow.com/questions/8356842/how-to-use-nsjsonserialization – kbgn

+0

爲什麼有人投票呢?看起來對我來說是一個非常有效的問題! – Icaro

回答

3

我認爲問題更多的是您對數據的表示。

如果您可以避免將所有鍵更改爲字符串,那麼它可以是字典,因爲字符串符合Hashable。否則,它將被定義爲Any,並不能真正成爲Dictionary鍵。

這樣做允許以下:

let myJsonDict : [String:AnyObject] = [ 
    "value": 1123, 
    "test": "some string", 
    "NestedDict1": [ 
     "city": "A City Name", 
     "address": "An Address", 
     "NestedDict2": [ 
      "1": 1, 
      "39": 2 
     ], 
     "favorite1": 2, 
     "favorite3": "Chocolate" 
    ] 
] 

var jsonObject = NSJSONSerialization.dataWithJSONObject(myJsonDict, options: NSJSONWritingOptions.PrettyPrinted, error: nil) 


println(NSString(data: jsonObject!, encoding: NSUTF8StringEncoding)!) 

其給出以下輸出:

{ 
    "test" : "some string", 
    "NestedDict1" : { 
    "city" : "A City Name", 
    "address" : "An Address", 
    "favorite3" : "Chocolate", 
    "NestedDict2" : { 
     "1" : 1, 
     "39" : 2 
    }, 
    "favorite1" : 2 
    }, 
    "value" : 1123 
} 
1

夫特3

let myJsonDict : [String: Any] = [ 
    "Dict1": "1", 
    "test": "A Value", 
    "NestedDict1":[ 
     "city": "A City Name", 
     "address": "An Address", 
     "NestedDict2": [ 
      "1": "1", 
      "39": "2" 
     ], 
     "favorite1": "2", 
     "favorite3": "Chocolate" 
    ] 
] 
let jsonObject = try? JSONSerialization.data(withJSONObject: myJsonDict, options: []) 

if let jsonString = String(data: jsonObject!, encoding: .utf8) { 
    print(jsonString) 
} 

輸出

{「test」:「A Value」,「Dict1」:「1」,「NestedDict1」:{「favorite1」:2,「city」:「A City Name」,「NestedDict2」:{「1 「:」 1" , 「39」: 「2」}, 「favorite3」: 「巧克力」, 「地址」: 「一個 地址」}}