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


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

注意,值";数据";也是一本字典。

我有一个类似上面的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)
}
}

最新更新