|
背景:最近应该有很多人看见了,突然多了一个人混问答区,不才想混个荣誉666.在近半个月的问答区的抢答过程中,发现了一些很有意思的事情。促使我想来整理一下JSON的基础。很多人都会用JSON,喜欢用JSON,但是对JSON的理解并没有想象中那么透彻。
1、JSON是什么?
官方定义:JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
说人话:就是以固定标准格式用字符串记录的数据。那是什么样的标准格式呢?
2、JSON的标准格式?
1. 六个构造字符(且必须为半角字符,部分模块可能会优化替换全角字符为半角字符):“ [ ” 、“ ] ” 、“ { ”、“ } ”、“ : ”、“ , ”
其中 “ [ ” 、“ ] ” 与 “ { ”、“ } ”必然是成对出现。
2. 在这六个构造字符的前或后允许存在无意义的空白符。
例如:空格,回车[字符 (13)],换行[字符 (10)] 等...
注意:是在六个构造字符的前或者后
3.JSON的构成:
其格式对应逻辑:key:value 的键对值 一个key对应一个value
key:必须被双引号包围,这时候注意上一条。空白符问题。如果在双引号外出现空白符属于是构造字符前后,如果是在双引号内则是改变了key的值。
value: 值的类型共计4种:数组、对象、字符串、数值。
最简单的JSON :
value的值为字符串: {"name":"钥匙"} 字符串必须由双引号包围
value的值为数值: {"age":29} 数值则无其它符号包围
value的值为对象: {"obj":{"name":"钥匙"}} 对象的定义可粗暴的认为内部也是一串单独的JSON,拎出来可以单独解析的那种。
value的值为数组:数组的定义可以说是最有意思的了,他的值可以包含上面所有:
数值可以: {"data":[1,2,3]}
字符串可以:{"data":["钥匙","精易论坛","精易论坛的钥匙"]}
对象也可以:{"data":[{"name":"钥匙","age":29},{"name":"精易论坛","age":14}]}
甚至可以混合组成 : {"data":[1,2,"精易论坛",{"name":"钥匙","age":29},{"name":"精易论坛","age":14},[0,1]]}
但是不论数组的组合有多少种方式,都有一个共性:每个成员中间都是用的构造字符(,)进行分隔分隔后的每个成员必须满足值为字符串、数组、对象、数组的四种基本类型。
3、JSON的一些误区
很多人初次接触JSON大多数是在学习POST的过程中,从接口/网页中截取的JSON数据。但很多时候截取的数据却怎么都没有办法解析。请各位新手注意:JS对象与JSON字符串的根本定义
[JavaScript] 纯文本查看 复制代码 var obj = {name: '钥匙', age: 29}; //这是一个对象,注意键名也是可以使用引号包裹的
[JavaScript] 纯文本查看 复制代码 var json = '{"name": "钥匙", "age": "29"}'; //这是一个 JSON 字符串,本质是一个字符串
上面代码中很简单明确的能看出。第二段的JSON是被单引号所包围的本质是一个字符串。而第一段没有被单引号包围是JS对象。
4、JSON的实例解析
简单看个图解,右侧树状图清晰可见JSON结构,JSON取数据的路径逻辑:每层的key值,以【.】间隔;
例如:
取出上图中data对象的totalPages数值 data为一个对象,totalPages为一个数值 路径组合为:data.totalPages;
取出上图中data对象的content数组下的第一个值里面的id,这时content变成了一个数组了怎么来去呢?方法很简单,用[0],[1],[2]....的方式来表示数组中下标位置,注意:下标从0开始,路径组合为:data.content[0].id;
以上截图解析代码见附件。
5、JSON的一些工具
线上解析工具:https://tool.chinaz.com/tools/jsoneditor.aspx
线上格式校验:https://www.bejson.com/
一些优质解析模块:精易模块,YYJSON,zyJson的JSON解析等等...
第一次发教程贴,文章简陋...见谅!~~~
补充内容 (2023-4-8 21:19):
突然想到一个东西今天在问答区遇见的:所有易语言的JSON一概转码一次最好。UTF-8转ASIN。编码里面的东西太多。太坑了。 |
评分
-
参与人数 3 | 好评 +3 |
精币 +10 |
收起
理由
|
猥琐小胖子
| + 1 |
+ 4 |
奉上小小红包希望笑纳 |
撒加
| + 1 |
+ 5 |
YYDS~! |
易神
| + 1 |
+ 1 |
感谢分享,很给力!~ |
查看全部评分
|