JSON 只有两种容器,但用错的人不少。

最常见的错误,是把“一组数据”写成一个对象,键名用 id 拼出来:{"1": {...}, "2": {...}}。能跑,但没人愿意维护。

对象描述“一个东西”

花括号里是属性名和属性值,顺序不重要,靠键取值。

用户信息、配置项、接口返回的单个实体,都适合对象。比如 {"id": 1, "name": "张三", "active": true}。

判断标准很简单:这份数据是不是在描述同一个事物的多个特征。是,就用对象。

数组描述“一组东西”

方括号里是有序列表,靠下标或遍历访问。

用户列表、订单明细、标签集合,都适合数组。数组里的元素类型最好一致,全是用户对象,或者全是字符串。混着放虽然合法,但消费方要写一堆类型判断。

嵌套时的常见结构

列表接口一般长这样:{"code": 0, "data": {"list": [...], "total": 100}}。外层对象放状态和分页,列表放实际数据。

这种结构比直接返回一个裸数组好,因为以后加字段不用改根结构。很多团队踩过这个坑:接口一开始返回 [...],后来要加分页,只能改成对象,所有调用方都得改。

三个判断问题

这份数据是一个实体还是多个同类实体?

以后会不会加元信息,比如总数、游标、状态?

消费方是按名字取值,还是要遍历?

三个问题回答完,结构基本就定了。拿不准的时候,把两种写法都贴进 JSON 解析工具 看一眼,哪种更易读一目了然。