【问题标题】:Cannot convert empty array of arrays to JSON with Swift 2无法使用 Swift 2 将空数组转换为 JSON
【发布时间】: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)")
}

【问题讨论】:

    标签: ios json swift swift2


    【解决方案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 中编译,所以我不确定是否 这是有意或无意。我在 苹果开发者论坛:

    【讨论】:

    • 多么“桥梁”! :) 谢谢。
    • 绝对精彩。无论如何,您只是将 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 编码。”
    猜你喜欢
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    相关资源
    最近更新 更多