参考:
高程三-20章
JSON 使用-菜鸟教程

javascript对象表示法(javascript object notation)是一种语法类似js的数据格式
其比xml更加方便,无需创建dom,可以很方便的被解析成有用的JavaScript对象,读写都更方便
很多编程语言都支持,尤其在JavaScript中,以前可以通过eval()获取json值, ES5后可以直接使用JSON原生对象操作json

1 语法

可以表示三种类型的值: 简单值 和 对象、数组(不能包含以下不支持的复杂数据类型)
JSON 不支持复杂的数据类型(函数、正则表达式、日期等)。日期对象默认会转化为 ISO 格式的字符串,因此信息不会完全丢失。

1.1 简单值

语法更js一样,可以是Number 、String、Blooen 、Null
但是不支持undefined
其中stirng类型的值需要注意:必须用双引号裹住, 比如:”abc”, 单引号会报错

1.2 对象

{
“name” : “abc”,
“age” : 29
}
属性名必须加双引号

1.3 数组

[25, “hi”, true]

1.4 区别JavaScript

image.png

2 解析和序列化

2.1 eval

由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误

  1. var txt = '{ "sites" : [' +
  2. '{ "name":"菜鸟教程" , "url":"www.runoob.com" },' +
  3. '{ "name":"google" , "url":"www.google.com" },' +
  4. '{ "name":"微博" , "url":"www.weibo.com" } ]}';
  5. var obj = eval ("(" + txt + ")");
  6. document.getElementById("name").innerHTML=obj.sites[0].name
  7. document.getElementById("url").innerHTML=obj.sites[0].url

但是eval执行传入的任意内容,所以存在安全原因,不推荐

2.2 JSON对象

基本大部分浏览器都已支持JSON对象,改对象专门用来做json与js之间的转换

2.2.1 JSON.parse()

解析JSON字符串并返回对应的值,可以额外传入一个转换函数,用来将生成的值和其属性, 在返回之前进行某些修改。

2.2.2 JSON.stringify()

返回与指定值对应的JSON字符串,可以通过额外的参数, 控制仅包含某些属性, 或者以自定义方法来替换某些key对应的属性值

3 JSON问题

3.1 空格

非法编码格式的空格导致解决错误
在编辑器显示跟其他空格不同,但目前没找出具体改空格的编码格式
image.png
一下文案:后面存在的空格,在解析JSON时出错
“vip_title”: “Fournisseurs”
image.png
参考:
https://juejin.cn/post/6970972103029833764