如何将 JSON 字符串序列化为多维 NSDictionary

How to serialize JSON string to multidimensional NSDictionary

"[{\"person\":\"person1\",\"data\":{\"age\":\"10\",\"name\":\"John\"}},
{\"person\":\"person2\",\"data\":{\"age\":\"20\",\"name\":\"Jonathan\"}},
{\"person\":\"person3\",\"data\":{\"age\":\"30\",\"name\":\"Joe\"}}]"

请注意,值“data”也是一个字典。

我有一个像上面那样的 JSON 字符串,我正在尝试像这样序列化:

if let dataFromString = conf.data(using: .utf8, allowLossyConversion: false) {
        let json = try JSON(data: dataFromString)
        
        configuration = json.dictionary ?? [:]
    }

然而配置始终是一个空字典。

您需要将您的 JSON 解析为类型 [[String: Any]]dictionariesarray。更好的现代方法是使用 Decodable 模型来解码 JSON.

let string = """
[
    {
        "person": "person1",
        "data": {
            "age": "10",
            "name": "John"
        }
    },
    {
        "person": "person2",
        "data": {
            "age": "20",
            "name": "Jonathan"
        }
    },
    {
        "person": "person3",
        "data": {
            "age": "30",
            "name": "Joe"
        }
    }
]
"""

let data = Data(string.utf8)

struct Person: Decodable {
    let person: String
    let data: PersonData
}

struct PersonData: Decodable {
    let age, name: String
}

do {
    let people = try JSONDecoder().decode([Person].self, from: data)
    print(people)
} catch { print(error) }

对于JSONString,

let conf = "[{\"person\":\"person1\",\"data\":{\"age\":\"10\",\"name\":\"John\"}},{\"person\":\"person2\",\"data\":{\"age\":\"20\",\"name\":\"Jonathan\"}},{\"person\":\"person3\",\"data\":{\"age\":\"30\",\"name\":\"Joe\"}}]"

使用JSONSerialization'sjsonObject(with:options:)方法得到预期的响应。

if let conf = str.data(using: .utf8 ) {
    do {
        let dict = try JSONSerialization.jsonObject(with: data, options: []) as? [[String:Any]]
        print(dict)
    } catch {
        print(error)
    }
}