我有一些字典想要转换为JSON。我的对象是类型,[[String: AnyObject]]并且最终要得到这样的示例:
[[String: AnyObject]]
[ { "abc": 123, "def": "ggg", "xyz": true }, { "abc": 456, "def": "hhh", "xyz": false }, { "abc": 789, "def": "jjj", "xyz": true } ]
这是我正在尝试的方法,但是编译器不喜欢我的声明:
extension Array where Element == Dictionary<String, AnyObject> { var json: String { do { return try? NSJSONSerialization.dataWithJSONObject(self, options: []) ?? "[]" } catch { return "[]" } } }
我怎样才能做到这一点?
一种简单的实现方法是扩展CollectionType。
使用可选的绑定和向下转换,然后序列化为数据,然后转换为字符串。
extension CollectionType where Generator.Element == [String:AnyObject] { func toJSONString(options: NSJSONWritingOptions = .PrettyPrinted) -> String { if let arr = self as? [[String:AnyObject]], let dat = try? NSJSONSerialization.dataWithJSONObject(arr, options: options), let str = String(data: dat, encoding: NSUTF8StringEncoding) { return str } return "[]" } } let arrayOfDictionaries: [[String:AnyObject]] = [ ["abc":123, "def": "ggg", "xyz": true], ["abc":456, "def": "hhh", "xyz": false] ] print(arrayOfDictionaries.toJSONString())
输出:
[ { "abc" : 123, "def" : "ggg", "xyz" : true }, { "abc" : 456, "def" : "hhh", "xyz" : false } ]