JSON到数组转换

时间:2017-07-28 20:20:15

标签: ios arrays json xcode8

我试图将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字符串,并且字符串是正确的。请帮帮我们。

2 个答案:

答案 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?如果你有充分的理由可以解释然后使用它。如果您不这样做,只是从某处复制代码,然后将其删除。