Json 详解,5 分钟学会

- 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 在流式处理、易读性上​更胜一筹​。比如 HTMLSVG 实质上是建立在 XML 之上的。

另外,需要特别说清楚的是,Json 文本实质上是一条字符串。

所以在程序中使用 Json 数据时,需要通过特定的方法转换为对应的对象变量才能使用。

以 JavaScript 为例,需要将 Json 字符串转换为 JavaScript 的对象变量后才能使用,JavaScript 的对象变量也同样可转换为 Json 字符串。

所以,​Json 只是一种文本规范,至于程序中的 Json 对象、Json 变量,则根据不同编程语言、不同 Json 库会有操作、表达上的差异。

且并不是所有编程语言都原生支持 Json 对象,一些编程语言需要引入第三方 Json 库才能使用。

2.Json 规范详解

接下来是 Json 规范详细介绍,​Json 支持 6 种类型的值

分别是**字符串、数字、布尔值、null、对象、数组**。

先说明 4 种常规的值类型。

  1. 字符串是包含在双引号内的多个字符。如果字符串内包含双引号,则需要使用\转义。
  2. 数字可以是整数、浮点数(小数)。
  3. 布尔值是 true、false。
  4. 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 只是它们的简化版。

但是仍然惊叹于这样的设计。

表达方式的改变,可能会引起某种质变。

如一种优秀的低代码表达方式,将会给编程效率带来质变。

这也是我们近些年一直在探索的事情。

  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    54 引用 • 190 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
guowei2025
风有约,花不误,年年岁岁不相负; 落日与晚风,朝朝又暮暮。 哈尔滨