簡體   English   中英

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,檢查它是否是具有String鍵的字典,然后返回該字典或nil。 由於您的數據是數組而不是字典,因此它返回nil。 確實是您要的,但不是您想要的。

您期望的是一系列字典,而不是字典。 您還應該使用Any代替AnyObject。 因此使用

as? [[String: Any]]

外部[]表示它是一個數組,內部[String:Any]表示該數組中的項目必須是帶有String鍵和Any值的字典。

為什么要使用.mutableContainers? 如果您有充分的理由可以解釋,請使用它。 如果您不這樣做,只是從某個地方復制了代碼,則將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM