无法使用 Swift 2 将空数组转换为 JSON
Posted
技术标签:
【中文标题】无法使用 Swift 2 将空数组转换为 JSON【英文标题】:Cannot convert empty array of arrays to JSON with Swift 2 【发布时间】:2015-07-31 06:37:52 【问题描述】:这段代码有什么问题(受this 示例的启发)?它当前打印 JSON 字符串 "(<5b5d>, 4)"
而不是预期的 "[]"
。
var tags: [[String]] = []
// tags to be added later ...
do
let data = try NSJSONSerialization.dataWithJSONObject(tags, options: [])
let json = String(data: data, encoding: NSUTF8StringEncoding)
print("\(json)")
catch
fatalError("\(error)")
【问题讨论】:
【参考方案1】:简答: JSON 数据的创建是正确的。问题出在
将数据转换为字符串,你想要的是NSString
方法:
let json = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
产生预期的[]
。
答案稍长: 你的代码
let json = String(data: data, encoding: NSUTF8StringEncoding)
调用String
init 方法
/// Initialize `self` with the textual representation of `instance`.
/// ...
init<T>(_ instance: T)
结果是 tuple 的文本表示
(data: data, encoding: NSUTF8StringEncoding)
:
(<5b5d>, 4)
其实你可以用任意参数调用String()
let s = String(foo: 1, bar: "baz")
print(s) // (1, "baz")
在 Swift 2 中。这不能在 Swift 1.2 中编译,所以我不确定是否 这是有意或无意。我在 苹果开发者论坛:
String init accepts arbitrary arguments。【讨论】:
多么“桥梁”! :) 谢谢。 绝对精彩。无论如何,您只是将 JSON 数据转换为字符串进行调试。 而且我在任何地方都找不到任何保证 JSON 数据将是 UTF-8 编码的保证。 @gnasher729:这不是保证,但tools.ietf.org/html/rfc7159#section-8.1 声明:“默认编码是 UTF-8,...”。 – 另一方面,OP 的原始代码现在可以正常工作,因为String
现在有一个init?(data: NSData, encoding: NSStringEncoding)
方法。
@gnasher729:dataWithJSONObject
的文档也明确指出:“结果数据以 UTF-8 编码。”以上是关于无法使用 Swift 2 将空数组转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章