加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Swift 3中使用选项的JSONSerialization

发布时间:2020-12-14 04:46:35 所属栏目:百科 来源:网络整理
导读:在 Swift 3中,具有可选值的数组的JSONSerialization失败.这在Swift 2中起作用(产生null作为预期的nil选项的JSON值). 编辑:它没有,但留在这里,因为这是我提出问题时的错误信念. 斯威夫特2: let a: [String!] = ["a","b","c"]let b: [String] = ["a","c"]let
在 Swift 3中,具有可选值的数组的JSONSerialization失败.这在Swift 2中起作用(产生null作为预期的nil选项的JSON值).

编辑:它没有,但留在这里,因为这是我提出问题时的错误信念.

斯威夫特2:

let a: [String!] = ["a","b","c"]
let b: [String] = ["a","c"]

let s: String! = "a"
let c = ["a",s]

NSJSONSerialization.isValidJSONObject(a)    //true
NSJSONSerialization.isValidJSONObject(b)    //true
NSJSONSerialization.isValidJSONObject(c)    //true

斯威夫特3:

let a: [String?] = ["a",s]

JSONSerialization.isValidJSONObject(a)    //false
JSONSerialization.isValidJSONObject(b)    //true
JSONSerialization.isValidJSONObject(c)    //false

这是一个预期的更改吗?它似乎很容易出错,因为任何使用隐式类型构造的数组或字典现在可能对JSON无效(即使它们实际上不包含任何nil值).

另外,如何指定空值?

解决方法

更新:截至Swift 3.0.1 / Xcode 8.1 beta 2,可选项
自动桥接到NSNull实例,请参阅

> SE-0140 – Warn when Optional converts to Any,and bridge Optional As Its Payload Or NSNull

和Xcode 8.1测试版发行说明.

例:

let array: [String?] = [ "a",nil,"c"]
let jsonData = try! JSONSerialization.data(withJSONObject: array)

print(String(data: jsonData,encoding: .utf8)!)
// ["a",null,"c"]

Swift 2和3.0的上一个答案:只有NSNull()被序列化为JSON null,而不是选项
(独立于Swift版本).

可以像这样转换一组选项:

let a: [String?] = ["a","c"]

let b = a.map { $0 as Any? ?? NSNull() }
print(b) // ["a",<null>,"c"]

let d = try! JSONSerialization.data(withJSONObject: b)
print(String(data: d,encoding: .utf8)!) // ["a","c"]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读