很多年前就接触过JSON,那是一份接口协议文档,两个模块程序之间用JSON通信。
但是,直到最近,才学习JSON,学会用手搓、用aardio编程处理JSON数据等。究其原因如下:
学会之后回头再看,JSON,其实只需要一篇小文章就能讲清楚。
JSON本身是一种协议,与TCP/IP、UDP等网络协议没有本质上的不同,与JavaScript等语言也没有必然联系。
协议是用来规范通信数据格式的,以便协议双方能够顺利交换数据(信息),实现通信。
JSON定义了七种数据,称作JSON值:
1、数字(number)
数字只能是整数(如:0、2、5)或浮点数(如:7.99)。
2、字符串(string)
字符串以英文双引号“"”开始与结束(如:"json")。
3、数组(array)
数组以左中括号“[”开始,以右中括号“]”结束(如:[0, 2, 5, 7])。
4、对象(object)
对象以左花括号“{”开始,以右花括号“}”结束(如:{"name":"wenxi"})。
5、true
只能是true,不能写作True、TRUE等。
6、false
只能是false,不能写作False、FALSE等。
7、null
只能是null,不能写作NULL等。
实际应用中,一个JSON数据包,要么是一个JSON数组,要么是一个JSON对象。其他JSON值,即数字、字符串、true、false、null等,通常作为数组或对象的元素出现。
一个JSON对象以“{”开头,以“}”结束:
{ key:value,key1:value1… }
或中文表示:
{ 键:值,键1:值1… }
其中:
一个JSON数组以“[”开头,以“]”结束:
[ value,value1,value2… ]
或中文表示:
[ 值,值1,值2…]
其中:
一开始在wx_sleep表中,设计日期时间字段qy_time记录每晚起夜时间:
实际一使用就发现,有起夜2次的情况。查知偶尔一晚起夜3次算正常,于是新增日期时间字段qy1_time、qy2_time:
学习JSON之后,发现用JSON数组可将所有起夜时间存储到一个VARCHAR字段中(qy_notes)。再不用纠结qy_time字段个数了:
手搓两条起夜数据,指定JSON格式显示:
如果HeidiSQL显示为一行,说明按JSON格式化数据失败,即不是合法的JSON数组(末尾多了个“,”):
实际应用中,常用JSON保存程序配置信息。JSON配置信息,可以看作是人向程序传递信息的JSON数据包。
以下是Cryptomator程序的配置文件settings.json:
从上图可知,配置文件settings.json中只有一个JSON对象。这个对象中,与键"directories"对应的值,是一个JSON数组。这个数组包含了另一个JSON对象。
JSON对象与对象、数组与数组以及对象与数组之间相互包含(即嵌套),不限层级,使得JSON极具生命力,应用十分广泛。
比如,Markdown写作软件“妙笔”拿JSON当数据库用:
由上图可知,数据文件doc_tree.json中只有一个JSON数组。这个数组包含多个对象。其第一个对象中,与键"children"对应的值,是一个JSON数组,这个数组包含了多个JSON对象。
JSON是一种协议。JSON协议数据包结构本质上只有两种:JSON对象和JSON数组。所以,JSON非常容易学习:
友情链接: 黑马模板网