ios - Json 快速更新
问题描述
目标是将 innerJson 转换为 Array<[String:Any]>。这有什么错误?请帮忙
var outerJson:String? = "{\"outerkey1\":\"Air France\",\"innerJson\":\"[{\\\"innerJsonKey1\\\":\\\"1\\\",\\\"innerJsonKey2\\\":{\\\"businessPurpose\\\":\\\"Test\\\",\\\"description\\\":\\\"Testing \\\"}},{\\\"innerJsonKey1\\\":\\\"2\\\",\\\"innerJsonKey2\\\":{\\\"businessPurpose\\\":null,\\\"description\\\":null}}]\",\"AirClass\":\"null\",\"FromTo\":\"Utti (QVY)\\/Umea (UME)\"}"
var convertedDict:[String:Any]?
if let data = outerJson?.data(using: String.Encoding.utf8) {
do {
convertedDict = try JSONSerialization.jsonObject(with: data, options: []) as? [String:Any]
//print(convertedDict)
} catch {
//CALogger.dPrint(error)
}
}
//print(convertedDict?["innerJson"] as Any)
var array = convertedDict?["innerJson"] as? Array<[String:Any]>
print(array)
解决方案
请仔细阅读 JSON。key 的值innerJson
是 a(other JSON) String
,而不是数组。多行文字字符串语法使其更清晰。
您必须两次应用 JSONSerialization
let outerJson = """
{"outerkey1":"Air France","innerJson":"[{\\"innerJsonKey1\\":\\"1\\",\\"innerJsonKey2\\":{\\"businessPurpose\\":\\"Test\\",\\"description\\":\\"Testing \\"}},{\\"innerJsonKey1\\":\\"2\\",\\"innerJsonKey2\\":{\\"businessPurpose\\":null,\\"description\\":null}}]","AirClass":"null","FromTo":"Utti (QVY)\\/Umea (UME)"}
"""
let data = Data(outerJson.utf8)
do {
if let outerDict = try JSONSerialization.jsonObject(with: data) as? [String:Any],
let innerJSON = outerDict["innerJson"] as? String {
if let innerArray = try JSONSerialization.jsonObject(with: Data(innerJSON.utf8)) as? [[String:Any]] {
print(innerArray)
}
}
} catch {
//CALogger.dPrint(error)
}
推荐阅读
- apache-beam - 如何在 Apache Beam 中实现类似于 Spark 的累加器的变量
- python - Python 3 + Click:当从另一个命令调用一个命令时,CLI 参数会被破坏
- sql - 不能混合聚合值和非聚合值
- swift - iOS - 使用 linphone 4.4.0 不会增加呼叫会议持续时间
- javascript - TypeError:AWS.Location 不是构造函数
- django - 其中哪个是 django 中最昂贵的查询?
- api - 来自多个不同 REST 调用的数据的有序分页
- angular - Ionic Angular 应用程序无法在 Xcode 12.5 MacOS 11.5.2 中引导 - 已解决
- json - 如何通过在flutter中调用API动态添加行元素?
- python - 缩短冗余计算