You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON中同类数值字段的两种表示方案:哪种更符合设计规范?

JSON Payload格式设计方案对比与选型建议

需求说明

  • 包含多个存储同类数值数据的字段(参考items中的字段)
  • items中的元素数量不固定:部分请求可能缺少某些字段,方案1中需将对应字段设为null表示不存在

两种设计方案

方案1:键值对对象结构

{
   "name":"my_name",
   "id": 1234, 
   "items" : {
     "number_of_pens":  2,
     "number_of_books": 3,
     "number_of_bags":  1
   }
}

说明:items是一个对象,每种物品对应独立字段,缺失字段需显式设为null。

方案2:数组嵌套对象结构

{
   "name":"my_name",
   "id": 1234,
   "items": [
    { 
      "name" : "number_of_pens",
      "value": 2
    },
    { 
      "name" : "number_of_books",
      "value": 3
    },
    { 
      "name" : "number_of_bags",
      "value": 1
    }
  ]
}

说明:items是数组,每个元素是包含name(物品标识)和value(数值)的对象,仅存在的物品会被加入数组。

选型分析与设计原则参考

已评估维度回顾

  • Schema变更:方案1新增物品类型需修改Schema,方案2无需变更Schema,仅需新增数组元素;但方案1的字段语义更明确,Schema校验更直接。
  • 多语言/框架易用性:方案1可直接通过字段名取值(如items.number_of_pens),Java、C#这类强类型语言能直接映射为实体类属性,使用更省心;方案2需要遍历数组匹配name字段才能取值,代码量更大。
  • Payload大小:方案1冗余更少(不用重复写name、value这些键),相同数据下传输体积更小,效率更高。

补充需考虑的维度

  • 数据扩展性:如果未来要给单个物品加额外属性(比如单价、品牌),方案2只需在数组元素里加新字段即可;方案1得给每种物品新增对应属性(如number_of_pens_price),会让对象结构越来越臃肿。
  • 查询与过滤效率:如果经常要按物品类型筛选数据,方案1直接通过字段访问,速度更快;方案2得遍历数组匹配,数据量大时性能会受影响。
  • 空值处理:方案1需要手动给缺失字段设null,容易遗漏;方案2只要不添加对应数组元素就行,天然符合JSON“缺失即不存在”的语义,不用额外处理空值。
  • 数据一致性:方案1的字段名是固定的,能避免拼写错误(比如把number_of_pens写成num_of_pens);方案2的name是字符串,容易出现拼写不一致的问题,得额外做校验。

选型建议

  • 如果物品类型相对固定,且不需要给单个物品加额外属性,优先选方案1:语义清晰、访问方便、传输高效,适配强类型语言的实体类映射。
  • 如果物品类型会频繁新增,或未来要给物品扩展更多属性,优先选方案2:Schema稳定、扩展性强,天然适配动态变化的物品集合。

内容的提问来源于stack exchange,提问作者Deniz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:45:10