【问题标题】:Parse Dictionary of Array of Dictionary in Swift 3在 Swift 3 中解析字典数组的字典
【发布时间】:2018-01-05 13:19:30
【问题描述】:

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

我的 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)

任何帮助将不胜感激。

【问题讨论】:

  • 哪条线路崩溃了?另外,为什么不将每个字典都转换为[String:Any],将每个数组转换为[Any]?保持简单。
  • 能否请您检查更新代码我添加了应用程序崩溃的行

标签: ios json dictionary swift3


【解决方案1】:

别说

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

这太具体了。直接说

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

知道,当您从字典中按键获取某些内容时,它将是一个数组,但是当您找到它时,您可以从字面上越过那座桥。

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

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

【讨论】:

    【解决方案2】:

    当您单独解析节点时,请避免强制转换为(超过两个级别)嵌套类型。

    根据错误消息,键 data 的值似乎是一个数组 (Array&lt;Dictionary&lt;String, Any&gt;&gt;)

    if response.success {
        let resObj = response.responseObject as! Dictionary<String, Any>
        let dataArray = resObj["data"] as! Array<Dictionary<String, Any>>
    
    ...
    

    这意味着 JSON 输出是错误的,我不知道接下来会发生什么......

    【讨论】:

    • 仍然收到类似的错误 - 无法在同一行将类型“__NSArrayM”(0x11258ae00)的值转换为“NSDictionary”
    • 那么JSON输出是错误的。据此,键 data 的值是一个字典。但是根据错误消息,它是一个数组。请您重新检查一下 JSON。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2017-06-23
    • 2017-02-09
    • 2017-07-14
    • 2016-07-25
    相关资源
    最近更新 更多