SwiftyJSON 对象的 JSON 序列化失败

Posted

技术标签:

【中文标题】SwiftyJSON 对象的 JSON 序列化失败【英文标题】:JSON Serialization failing for SwiftyJSON Objects 【发布时间】:2017-06-22 13:46:59 【问题描述】:

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


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

我用 SwiftyJSON 搭建了一个 Playground,并编写了以下测试:

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)'

你能指出问题出在哪里吗?

【问题讨论】:

【参考方案1】:

你注错了类型,两个字典都是[String:Any]

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

基本上你不能用JSONSerialization 序列化JSON 对象,除非你让SwiftyJSON 完成这项工作。

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

【讨论】:

【参考方案2】:

您的字典类型有误,应该是 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

【讨论】:

以上是关于SwiftyJSON 对象的 JSON 序列化失败的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 响应保存为变量以使用 SwiftyJSON 反序列化

SwiftyJSON 添加 JSON 对象数组

使用 SwiftyJSON 反序列化时如何添加对象数组

使用 SwiftyJSON 的 Swift 可失败初始化器

JSON序列化到SwiftyJSON

通过解析 JSON-SwiftyJSON 创建一个 Class 对象数组