SwiftyJSON对象的JSON序列化失败

时间:2017-06-22 13:47:00

标签: swift dictionary swifty-json

我正试图获得这样的json结构:

{
"settings": [
{"value": 1, "tag": "active"}, 
{"value": 1, "tag": "active"}
]
}

我使用SwiftyJSON设置了一个游乐场并编写了以下测试:

let ele : [String:JSON] = ["tag" : "active", "value" : 1]
let ele2 : [String:JSON] = ["tag" : "active", "value" : 1]

let eleJSONArray = [ele, ele2]

let parameters : [String:Any] = JSON(["settings":eleJSONArray]).dictionaryObject!
print(parameters)
try JSONSerialization.data(withJSONObject: parameters, options: JSONSerialization.WritingOptions.prettyPrinted)

但是我收到序列化错误,好像其中一个元素无效:

["settings": [["value": 1, "tag": active], ["value": 1, "tag": active]]]
2017-06-22 15:37:59.078 TestPlayground[57075:19147452] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (_SwiftValue)'

你能指出我的问题所在吗?

2 个答案:

答案 0 :(得分:1)

您正在注释错误的类型,这两个词典都是[String:Any]

let ele : [String:Any] = ["tag" : "active", "value" : 1]
let ele2 : [String: Any] = ["tag" : "active", "value" : 1]

除非您让JSON完成工作,否则基本上您无法使用JSONSerialization序列化SwiftyJSON个对象。

旁注:如果将JSON发送到服务器,请不要打印漂亮。服务器并不关心文本格式。

答案 1 :(得分:1)

您的词典类型错误,应该是Any而不是JSON,因为值为Any而不是JSON。

对于词典,正确的语法为[String:Any]

let ele : [String:Any] = ["tag" : "active", "value" : 1]
let ele2 : [String:Any] = ["tag" : "active", "value" : 1]

现在你应该能够通过以下方式获得你的价值观:

let tag = ele["tag"] // active