在Swift 3中解析字典数组的字典

时间:2017-07-29 15:31:58

标签: ios json dictionary swift3

我正在开发一个项目,我正在获取一个再次包含字典的数组字典

我的Json回应是

{
"code": 200,
"status": "OK",
"success": "true",
"message": "success",
"data": {
"vehicletypeData": [
  {
    "vehicle_type_id": "1",
    "vehicle_type": "Any"
    },
    {
      "vehicle_type_id": "11",
      "vehicle_type": "Bike"
    }
   ]
  }
 }

我正在解析像

这样的数据
        if response.success {
            let resObj = response.responseObject as! Dictionary<String, Any>
            let catArray = resObj["data"] as! Dictionary<String,Array<Dictionary<String,Any>>>   // Crashes here
            let vehicleData = catArray["vehicletypeData"] as! Array<Dictionary<String, Any>>

            for vehicle in vehicleData {
                self.jobCategories.append(PreJobVehicleData.mj_object(withKeyValues: vehicle))
            }
        }

我试图在我的模型中解析它

我在这里得到一个错误     - 无法将'__NSArrayM'(0x109b82e00)类型的值转换为'NSDictionary'(0x109b832d8)

任何帮助都会感激不尽。

2 个答案:

答案 0 :(得分:1)

不要说

 resObj["data"] as! Dictionary<String,Array<Dictionary<String,Any>>>

这太具体了。只是说

 resObj["data"] as! [String:Any]

知道当你通过该词典中的键获得某些东西时,它将是一个数组,但是当你来到它时,你可以从字面上穿过那个桥。

同样的规则适用于您的其他演员阵容。只需使用最广泛的最简单类型转换为Swift字典或数组。

(请注意,所有这些都将在Swift 4中解决,您可以在其中构建JSON结构的知识,直到您的提取。)

答案 1 :(得分:0)

当您分别解析节点时,无论如何都要避免转换为(超过两个级别)嵌套类型。

根据错误消息,键AveOut的值似乎是一个数组(data

Array<Dictionary<String, Any>>

这意味着JSON输出错误,我不知道下一步是什么......