首页 > 解决方案 > 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)

标签: iosjsonswift4.2

解决方案


请仔细阅读 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)
}

推荐阅读