ObjectMapper 和具有唯一键的数组

Posted

技术标签:

【中文标题】ObjectMapper 和具有唯一键的数组【英文标题】:ObjectMapper and arrays with unique keys 【发布时间】:2020-07-01 15:57:46 【问题描述】:

我遇到了 ObjectMapper 的问题以及 json 响应从服务器返回的方式。 有没有办法让 ObjectMapper 解析这个响应并创建一个房间数组?

目前我不能直接映射 json,因为键是唯一的,并且会更改每个请求,我也不能使用 ObjectMapper 方法访问带有点符号的嵌套对象,rooms.0.key,因为我不确定有多少对象,以及将显示的键。

有没有一种简单的方法来解析这个响应。

"rooms": 
        "165476": 
            "id": "165476",
            "area": 
                "square_feet": 334,
                "square_meters": 31
            ,
        "165477": 
            "id": "165477",
            "area": 
                "square_feet": 334,
                "square_meters": 31
            ,

【问题讨论】:

在此处以文本格式添加 Json。 @PGDev 已添加到问题中。 放弃ObjectMapper,转而使用Codable 【参考方案1】:

使用 Codable 解析上述 JSON 响应。

型号:

struct Rooms: Codable 
    let rooms: [String:Room]

 
struct Room: Codable 
    let id: String
    let area: Area


struct Area: Codable 
    let squareFeet: Int
    let squareMeters: Int

解析 JSON data 像这样,

do 
    let decoder = JSONDecoder()
    decoder.keyDecodingStrategy = .convertFromSnakeCase
    let response = try decoder.decode(Rooms.self, from: data)
    print(response.rooms.first?.key) //for the above json it will print "165476"
 catch 
    print(error)

【讨论】:

以上是关于ObjectMapper 和具有唯一键的数组的主要内容,如果未能解决你的问题,请参考以下文章

SAS/PROC-SQL 从具有唯一键的表转换为具有相同键的多行表

具有重复键的快速排序算法

具有单个键的多个值的STL集合

如何在 Swift 中解码具有许多唯一键的嵌套 JSON?

具有两个可能的唯一键的数据库表

使用 jq 将嵌套的 JSON 文件分解为具有唯一键的平面列表