我试图将JSON字符串转换为数组。 JSON字符串是:
[
{
"field_value" : "28 Aug 2017",
"field_data_type_combo_value" : "",
"field_data_type_category_id" : "1",
"form_id" : "19",
"field_id" : "133",
"message_unique_id" : "7941501245582800298",
"field_data_type_combo_id" : "0",
"field_data_type_id" : "1"
},
{
"field_value" : "",
"field_data_type_combo_value" : "",
"field_data_type_category_id" : "9",
"form_id" : "19",
"field_id" : "134",
"message_unique_id" : "7941501245582714588",
"field_data_type_combo_id" : "0",
"field_data_type_id" : "26"
},
{
"field_value" : "hk",
"field_data_type_combo_value" : "",
"field_data_type_category_id" : "6",
"form_id" : "19",
"field_id" : "135",
"message_unique_id" : "7941501245582699681",
"field_data_type_combo_id" : "0",
"field_data_type_id" : "17"
}
]
我的转化代码是
if let data = text.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String : AnyObject]
} catch {
print(error.localizedDescription)
}
}
转换结果始终为零。我还检查了在线JSON查看器中的JSON字符串,并且字符串是正确的。请帮帮我们。
答案 0 :(得分:1)
json不是顶层的字典而是数组。你可以从[ ... ]
看到,如果它是{ ... }
,它将是一本字典。使用相应的强制转换修复代码:
return try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [AnyObject]
答案 1 :(得分:1)
你明确地写下了你的电话:
as? [String: AnyObject]
换句话说,你要求Swift接受任何返回的JSON,检查它是否是带字符串键的字典,并返回该字典或nil。由于您的数据是数组而不是字典,因此返回nil。正是你要求的,但不是你想要的。
你期待的是一系列字典,而不是字典。您还应该使用Any而不是AnyObject。所以使用
转换它as? [[String: Any]]
outer []表示它是一个数组,内部[String:Any]表示数组中的项必须是带有String键和Any值的字典。
你为什么要使用.mutableContainers?如果你有充分的理由可以解释然后使用它。如果您不这样做,只是从某处复制代码,然后将其删除。