JSON 到数组转换
JSON to Array conversion
我正在尝试将 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 字符串,该字符串是正确的。请大家帮帮我。
那 json 不是顶层的字典而是数组。从[ ... ]
可以看出,如果是{ ... }
就是字典了。使用相应的转换修复您的代码:
return try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [AnyObject]
您在通话中明确写道:
as? [String: AnyObject]
换句话说,你要求 Swift 取任何 JSON returned,检查它是否是一个带有 String 键的字典,并且 return 该字典或零。由于您的数据是数组而不是字典,因此它 return 为零。正是您所要求的,但不是您想要的。
您期望的是字典数组,而不是字典。您还应该使用 Any 而不是 AnyObject。所以使用
转换它
as? [[String: Any]]
外层的[]表示它是一个数组,内层的[String: Any]表示数组中的项必须是具有String键和Any值的字典。
为什么要使用 .mutableContainers?如果您有充分的理由可以解释,请使用它。如果您不这样做,只是从某处复制代码,然后将其删除。
我正在尝试将 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 字符串,该字符串是正确的。请大家帮帮我。
那 json 不是顶层的字典而是数组。从[ ... ]
可以看出,如果是{ ... }
就是字典了。使用相应的转换修复您的代码:
return try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [AnyObject]
您在通话中明确写道:
as? [String: AnyObject]
换句话说,你要求 Swift 取任何 JSON returned,检查它是否是一个带有 String 键的字典,并且 return 该字典或零。由于您的数据是数组而不是字典,因此它 return 为零。正是您所要求的,但不是您想要的。
您期望的是字典数组,而不是字典。您还应该使用 Any 而不是 AnyObject。所以使用
转换它as? [[String: Any]]
外层的[]表示它是一个数组,内层的[String: Any]表示数组中的项必须是具有String键和Any值的字典。
为什么要使用 .mutableContainers?如果您有充分的理由可以解释,请使用它。如果您不这样做,只是从某处复制代码,然后将其删除。