以这个简化的例子为例:
let dict: [String: AnyObject] = ["foo": ("bar" as NSString).dataUsingEncoding(NSUTF8StringEncoding)!9]
let json = try! NSJSONSerialization.dataWithJSONObject(dict, options: [])
我无法让它运行,它崩溃了:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (NSConcreteMutableData)'
我需要向我的服务器发送一个 JSON block ,其中一些值是字符串,一些是 NSData
。我做错了什么?
最佳答案
值得您花时间通读 JSON RFC .注意:
JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).
JSON 不能表示原始数据,因此您需要将 NSData
转换为其中一种其他类型(通常是字符串)。一种常见的方法是:
let stringFromData = NSString(data: data, encoding: NSUTF8StringEncoding)
只需确保您和您的服务器就您将使用的编码达成一致。
如果你有很多这些,你可以通过你的字典映射并一次转换它们。根据您的结构,有几种可能的实现方式;这是一种方法:
let dictWithString = dict.map { (key, value) -> (String, NSObject) in
if let value = value as? NSData {
return (key, NSString(data: value, encoding: NSUTF8StringEncoding)!)
}
return (key, value)
}
关于ios - 当其中一个值是 NSData 时,如何使用 NSJSONSerialization 存储序列化 NSDictionary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37978679/