如何处理 JSON 中常见的嵌套数据?哪种结构最好?

Posted

技术标签:

【中文标题】如何处理 JSON 中常见的嵌套数据?哪种结构最好?【英文标题】:How to handle common nested data in JSON? Which structure is best? 【发布时间】:2021-10-04 02:46:59 【问题描述】:

我基本上有一个带有属性的对象数组(例如,shirtSize.和 shirtSize 可以有 M、L、XL 之类的值)。我的客户(前端)正在使用此响应,并希望将此列表显示为带有标签(= shirtSize)的行项目。在前端,每​​个行项目上都有一个图标,点击它会显示精确的尺寸(如高度、宽度等)。

注意:请假设这些尺寸(L、XL、X)是所有品牌中唯一可用的尺寸,并且它们在所有品牌中具有相同的尺寸。

为了实现这一点,我有两种 JSON 类型的结构,但很困惑选择哪一种。

结构1:


    "data": [
        
            "brand": "queen",
            "color": "black",
            "size": "X",
            "height: 24,
            "breadth": 35
        ,
        
            "brand": "jack",
            "color": "green",
            "size": "L",
            "height: 22,
            "breadth": 30
        ,
        
            "brand": "yeo",
            "color": "blue",
            "size": "XL",
            "height: 29,
            "breadth": 39
        ,
        
            "brand": "tero",
            "color": "pink",
            "size": "L",
            "height: 22,
            "breadth": 30
        ,
        ... // more objects
    ]

结构2:


    "size": 
        "X": 
            "height": 24,
            "breadth": 35
        ,
        "L": 
            "height: 22,
            "breadth": 30
        ,
        "XL": 
            "height: 29,
            "breadth": 39
        
    
    "data": [
        
            "brand": "queen",
            "color": "black",
            "size": "X",

        ,
        
            "brand": "jack",
            "color": "green",
            "size": "L",

        ,
        
            "brand": "yeo",
            "color": "blue",
            "size": "XL",

        ,
        
            "brand": "tero",
            "color": "pink",
            "size": "L",

        ,
        ... // more objects
    ]

分享您对哪种结构更好以及为什么更好的想法

【问题讨论】:

【参考方案1】:

第一个

在第二个中,您假设每个品牌的尺寸相同。 A 品牌的 L 与 B 品牌的 L 可能完全不同。即使是同一个品牌,衣服也可能完全不同。

如果您不想管理每个商品尺寸(以节省一些网络),我至少会通过指定品牌(L,品牌 A => x,y | L,品牌 B = > x1, y1 | ....)

【讨论】:

请假设这些尺寸(即 L、XL、X)是所有品牌中唯一可用的尺寸,并且它们在所有品牌中具有相同的尺寸。例如,我只是将键名保留为品牌,以填充数据。 PS:我已经用上述假设更新了问题【参考方案2】:

第二个。

这是因为结构良好,没有不必要的数据,您可以通过将 Size 解析为主要对象并添加合乎逻辑的高度和宽度来减少不必要的数据。

【讨论】:

【参考方案3】:

我认为您的响应必须是在正面需要较少转换的响应。调整它以尽可能容易地理解它。另一方面,我更喜欢第二个,因为你不重复数据,传输数据更小,可读性更好。

【讨论】:

以上是关于如何处理 JSON 中常见的嵌套数据?哪种结构最好?的主要内容,如果未能解决你的问题,请参考以下文章

Play 2.2 JSON Reads with combinators:如何处理嵌套的可选对象?

AWS Glue:如何处理具有不同架构的嵌套 JSON

如何处理android中reddit api的深层嵌套json响应?

Jackson - 如何处理(反序列化)嵌套的 JSON?

D3 - 如何处理 JSON 数据结构?

如何处理大 JSON 响应