如何处理 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:如何处理嵌套的可选对象?