Json 详解,5分钟学会

大家好,欢迎来到停止重构的频道

本期我们讨论Json

​Json是一种优秀的文本数据格式,在我们介绍的很多技术设计中,都会偏向使用Json作为数据格式。

我们将从以下几点展开讨论:

1、Json介绍

2、Json规范详解

3、Json的应用场景

Json 介绍

首先介绍Json,Json是一种文本数据格式,来源于编程语言JavaScript的对象语法。

但实质上,Json是独立于JavaScript的,两者并无强关联。

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

Json这种文本规范有什么好处呢?

Json的优点是可以简单灵活地表示树形结构的数据,通过简单的一条字符串,就可以记录多层结构的数据。

当然,可以记录树形数据的文本规范不仅只有JsonXML这种文本数据格式也可以。​

且大部分情况下,XML和Json是可以相互转换的

在文本不大、结构不复杂的情况下,Json更简洁,更易读一些。

但是,当文本特别大、或结构特别复杂时XML在流式处理、易读性上更胜一筹。比如HTML、SVG实质上是建立在XML之上的​。

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

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

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

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

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

Json 规范详解

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

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

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

字符串是包含在双引号内的多个字符。

如果字符串内包含双引号,则需要使用\转义。

数字可以是整数、浮点数(小数)。

布尔值是true、false​。

null为空值。

这4种常规类型的值是不允许内嵌其他值的,所以Json文本可以仅含有一个字符串或一个数字。

然后是2种允许内嵌其他值的值类型

对象是键/值对的字典,或者可以理解为哈希表。

需要包含在一对{}之内,单个对象内的多个键值对用逗号隔开​。

键值对的键必须为字符串,而值则可以是Json支持的6种值的任意一种,​且单个对象内的多个值无需统一类型

数组是需要包含在一对[]之内的,单个数组内的多个值用逗号隔开。

数组内的值可以是Json支持的6种值的任意一种,且单个数组内的多个值无需统一类型

得益于对象、数组这两种允许内嵌的值类型Json文本能表示复杂的树形数据

且为了提升Json文本的扩展性,一般都会采用对象或数组作为最外层结构。

所以我们看到的绝大多数Json文本都是包含在一对[]或{}中的。

数组或对象的长度、内嵌层深度在Json标准中并没有限制,但是一些Json库是可能存在长度限制的。

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

Json 应用场景

接下来是Json的应用场景,如前文所述。

Json这种文本规范一般适合数据量不大,且需要记录树形结构的数据,或需要灵活扩展数据时使用。

我们习惯在后端接口参数/返回数据、云计算任务、配置文件等场景使用Json文本。

在程序中使用Json对象作为数据池,在我们的低代码内核中使用Json文本记录程序逻辑等等。

很多场景我们都会优先考虑Json,简单、灵活的同时,也很易读。

一些文档型数据库,如ElasticSearch,数据也是Json形式的。

当然,Json很多时候只是一种选择,并不一定是当前场景的最优解​。

而且很多人反而会因为Json灵活性很大,Json变量无需显式定义就可以随意增加数据,认为当项目比较大、开发人员比较多时,会让代码更加混乱、更难维护。

这个无法争辩,但我们想说的是。

其实任何技术工具都不会直接对项目质量造成影响的,工具只会影响生产效率。

对项目质量造成影响的是项目过程,而约束项目过程的是大多数人看不上眼的规范

在我们前面讨论前端、后端架构时都详细讨论过了。

规范不完备或团队无法遵守规范,那么无论使用什么工具,代码都将是混乱难维护的。

总结

最后,​Json虽然不是框架、工具。而仅仅是一种设计,但是却能简单直接、灵活地表示复杂的树形结构数据。

尽管很多编程语言也有类似的对象变量,Json只是它们的简化版。

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

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

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

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

猜你喜欢

转载自blog.csdn.net/Daniel_Leung/article/details/134957160