【问题标题】:Convert String to Data for use with NSJSONSerialization将字符串转换为数据以用于 NSJSONSerialization
【发布时间】:2016-01-17 22:16:46
【问题描述】:

我有一个看起来像这样的字符串:(它来自一个解码的数据对象,我通过控制台修复并验证了这个输出的格式略有错误)

{"home":{"breakfast":{"protein":"55","carbs":"55","fiber":"55"},"snack":{"water":"55","fiber":"55"},"nextSnack":{"water":"55","fiber":"55"}}}

然后我想将该字符串转换为用于 NSJSONSerialization 的数据,我这样做:

let cleanStringData = cleanString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

执行此操作后我返回的对象:

if let jsonObject = try? NSJSONSerialization.JSONObjectWithData(cleanStringData!, options: NSJSONReadingOptions.MutableContainers) as? [String:AnyObject] {


    print(jsonObject)

} 

并不总是用引号来封装键和值。我将如何解决这个问题?非常感谢您的帮助,谢谢。

【问题讨论】:

  • 什么“不总是用引号来封装键和值”jsonObject?您是否尝试将其发送到服务器,代码的输出究竟是什么?

标签: swift


【解决方案1】:

没有什么可修复的:这是由于“print”在键入 AnyObject 时如何解释对象内容。尝试访问您的字典值,您会看到键是实际的字符串,即使它们显示时没有双引号。

let cleanString = "{\"home\":{\"breakfast\":{\"protein\":\"55\",\"carbs\":\"55\",\"fiber\":\"55\"},\"snack\":{\"water\":\"55\",\"fiber\":\"55\"},\"nextSnack\":{\"water\":\"55\",\"fiber\":\"55\"}}}"

let cleanStringData = cleanString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

do {
    if let jsonObject = try NSJSONSerialization.JSONObjectWithData(cleanStringData!, options: []) as? [String:AnyObject] {
        if let home = jsonObject["home"] as? [String:AnyObject],
            let snack = home["snack"] as? [String:AnyObject] {
                print(snack) // ["water": 55, "fiber": 55]
        }
    }
} catch let error as NSError {
    print(error)
}

【讨论】:

  • 这很尴尬,哈哈 - 谢谢。我在解密我提到的原始数据时一直处于这种验证状态,我一直在使用控制台来验证我在做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2020-07-15
  • 2015-10-29
相关资源
最近更新 更多