- Json 详解,5分钟学会 - 知乎专栏
- [https://zhuanlan.zhihu.com/p/700549474](https://zhuanlan.zhihu.com/p/700549474)
- 本期我们讨论 Json。 Json是一种优秀的文本数据格式,在我们介绍的很多技术设计中,都会偏向使用Json作为数据格式。 我们将从以下几点展开讨论: 1、Json介绍 2、Json规范详解 3、Json的应用场景 Json 介绍首先介…
- 2025-11-17 14:05
本期我们讨论**Json**。
Json 是一种优秀的文本数据格式,在我们介绍的很多技术设计中,都会偏向使用 Json 作为数据格式。
我们将从以下几点展开讨论:
1、Json 介绍
2、Json 规范详解
3、Json 的应用场景
1.Json 介绍
首先介绍 Json,Json 是一种文本数据格式, 来源于编程语言 JavaScript 的对象语法。
但实质上,Json 是独立于 JavaScript 的,两者并无强关联。

简单地说,Json 就是一种文本规范,或者说是一种字符串规范,图中所示的都是符合 Json 规范的文本。

那 Json 这种文本规范有什么好处呢?
Json 的优点是可以简单灵活地表示树形结构的数据,通过简单的一条字符串,就可以记录多层结构的数据。

当然,可以记录树形数据的文本规范不仅只有 Json,XML这种文本数据格式也可以。
且大部分情况下,XML 和 Json 是可以相互转换的。
在文本不大、结构不复杂的情况下,Json 更简洁,更易读一些。
但是,当文本特别大、或结构特别复杂时,XML 在流式处理、易读性上更胜一筹。比如 HTML、SVG 实质上是建立在 XML 之上的。

另外,需要特别说清楚的是,Json 文本实质上是一条字符串。
所以在程序中使用 Json 数据时,需要通过特定的方法转换为对应的对象变量才能使用。
以 JavaScript 为例,需要将 Json 字符串转换为 JavaScript 的对象变量后才能使用,JavaScript 的对象变量也同样可转换为 Json 字符串。

所以,Json 只是一种文本规范,至于程序中的 Json 对象、Json 变量,则根据不同编程语言、不同 Json 库会有操作、表达上的差异。
且并不是所有编程语言都原生支持 Json 对象,一些编程语言需要引入第三方 Json 库才能使用。

2.Json 规范详解
接下来是 Json 规范详细介绍,Json 支持 6 种类型的值。
分别是**字符串、数字、布尔值、null、对象、数组**。

先说明 4 种常规的值类型。
- 字符串是包含在双引号内的多个字符。如果字符串内包含双引号,则需要使用\转义。
- 数字可以是整数、浮点数(小数)。
- 布尔值是 true、false。
- null 为空值。
这 4 种常规类型的值是不允许内嵌其他值的,所以 Json 文本可以仅含有一个字符串或一个数字。

然后是 2 种允许内嵌其他值的值类型
对象是键/值对的字典,或者可以理解为哈希表。
需要包含在一对 {}之内,单个对象内的多个键值对用逗号隔开。
键值对的键必须为字符串,而值则可以是 Json 支持的 6 种值的任意一种, 且单个对象内的多个值无需统一类型。

数组是需要包含在一对 []之内的,单个数组内的多个值用逗号隔开。
数组内的值可以是 Json 支持的 6 种值的任意一种, 且单个数组内的多个值无需统一类型。
得益于对象、数组这两种允许内嵌的值类型,Json 文本能表示复杂的树形数据。
且为了提升 Json 文本的扩展性,一般都会采用对象或数组作为最外层结构。
所以我们看到的绝大多数 Json 文本都是包含在一对[]或{}中的。
数组或对象的长度、内嵌层深度在 Json 标准中并没有限制,但是一些 Json 库是可能存在长度限制的。

另外,Json 文本中多余的空格、换行不会有实质上的影响,仅仅是为了方便阅读。

3.Json 应用场景
接下来是 Json 的应用场景,如前文所述。
Json 这种文本规范**一般适合数据量不大,且需要记录树形结构的数据,或需要灵活扩展数据时使用。**
我们习惯在后端接口参数/返回数据、云计算任务、配置文件等场景使用 Json 文本。
在程序中使用 Json 对象作为数据池,在我们的低代码内核中使用 Json 文本记录程序逻辑等等。
很多场景我们都会优先考虑 Json,简单、灵活的同时,也很易读。
一些文档型数据库,如 ElasticSearch,数据也是 Json 形式的。

当然,Json 很多时候只是一种选择,并不一定是当前场景的最优解。
而且很多人反而会因为 Json 灵活性很大,Json 变量无需显式定义就可以随意增加数据,认为当项目比较大、开发人员比较多时,会让代码更加混乱、更难维护。
这个无法争辩,但我们想说的是。
其实任何技术工具都不会直接对项目质量造成影响的, 工具只会影响生产效率。
对项目质量造成影响的是项目过程,而约束项目过程的是大多数人看不上眼的规范
在我们前面讨论前端、后端架构时都详细讨论过了。
规范不完备或团队无法遵守规范,那么无论使用什么工具,代码都将是混乱难维护的。

总结
最后,Json 虽然不是框架、工具。而仅仅是一种设计,但是却能简单直接、灵活地表示复杂的树形结构数据。
尽管很多编程语言也有类似的对象变量,Json 只是它们的简化版。
但是仍然惊叹于这样的设计。
表达方式的改变,可能会引起某种质变。
如一种优秀的低代码表达方式,将会给编程效率带来质变。
这也是我们近些年一直在探索的事情。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于