【问题标题】:JSONSerialization.jsonObject for complex array复杂数组的 JSONSerialization.jsonObject
【发布时间】:2020-07-26 08:46:56
【问题描述】:

我正在尝试将数据从 API 返回到对象。但是我收到了错误,因为数组很复杂并且类型不同 - 根据发出的请求,它也会与 API 不同。

let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, Dictionary<String, String>>

它给出的数组/数据是这样的:

[
   'heartbeatStatus' => 'ok',
    'events' => [
       ['id' => '1', 'name' => 'Event'],
       ['id' => '2', 'name' => 'Event 2'],
    ]         
]

有什么简单的方法吗?到目前为止,我在 SO 上看到的问题要么是针对 Swift 的旧版本(这是 Swift 5),要么并非完全不同。

我得到的错误是这样的(与我所做的各种尝试不同)

无法将“__NSSingleObjectArrayI”(0x1ed250b30) 类型的值转换为 'NSDictionary' (0x1ed251378)。 2020-04-13 18:52:23.173759+0100 已删除应用程序 ID [1209:472869] 无法转换类型的值 '__NSSingleObjectArrayI' (0x1ed250b30) 到 'NSDictionary' (0x1ed251378)。

【问题讨论】:

    标签: ios arrays swift xcode swift5


    【解决方案1】:

    尝试使用Codable。首先定义一个结构作为你的模型:

    struct HeartbeatResponse: Codable { // or whatever
    
        let heartbeatStatus: String
        let events: [Event]
    
        struct Event: Codable {
    
            let id: String
            let name: String
    
        }
    
    }
    

    然后解码:

    do {
        if let data = data {
            let heartbeat = JSONDecoder().decode(HeartbeatResponse.self, data)
            // do stuff with heartbeat
        }
    } catch {
        print(error)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 2017-03-20
      • 2021-06-26
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      相关资源
      最近更新 更多