文章目录
浅度分析JSON数据,因为JSON数据是最重要的前后端数据交互格式之一,但在使用的过程中,你是否出现过某些字段找不到之类的问题,因为JSON格式太过严格,所以会导致一系列我们认为的“坑”
JSON数据的真实面貌,毋庸置疑就是严格的遵守key:value的格式
一个大对象,包裹着key:value就是JSON
{
KEY:VALUE
}
- 在前端一般使用JSON.stringify(obj)函数来把数据转换成字符串,然后传给后端。如果你使用的是Nodejs后端则用JSON.parse(obj)就完成了前后端数据的交流,同样后端给前端返回JSON数据的时候也同理。其他语言也类似的对JSON数据进行转换
- 但是他也有很多规矩,在用JS做开发的时候,要注意JSON数据以下事项。不然达不到你想要的数据
- 先看代码和结果(建议直接看下面图片结果分析)
代码展示
var a = {
name:'张三',
foo:{
name:"张三1",
fun:function(){
console.log(a);
},
foo:{
name:'张三2',
age:12,
flag:true,
nos:undefined,
a:null,
f: new RegExp('\\w+'),
e:new Date(),
g:NaN
},
arr:[1,"1",null,undefined,function(){},true,[1,2,3]]
},
}
let b = JSON.stringify(a);
console.log(b);
// {"name":"张三","foo":{"name":"张三1","foo":{"name":"张三2","age":12,"flag":true,"a":null,"f":{},"e":"2022-08-25T08:34:37.559Z","g":null},"arr":[1,"1",null,null,null,true,[1,2,3]]}}
//为了好看点,我给他格式化一下
let 最终JSON.stringify结果 = {
"name":"张三",
"foo":{
"name":"张三1",
"foo":{
"name":"张三2",
"age":12,
"flag":true,
"a":null,
"f":{},
"e":"2022-08-25T08:34:37.559Z",
"g":null
},
"arr":[1,"1",null,null,null,true,[1,2,3]]
}
}
图片结果分析
通过观察结果,得到以下规律
- 字符串会用双引号引起来
- Number,null,boolean 类型都不用符号引
- undefined或fun函数的数据 会把这个key-value给删除掉
- 多余的逗号,都会智能的去掉,然后再转为符合规则的json数据
- RegExp定义的属性会变成 {}
- NaN 类型会变成 null
- e时间对象,会变成字符串形式
- 循环引用会出错误: a.c = a (报错)
对于嵌套的数组结构里面的数据:undefined,function(){} 和上面第一层写的有所不同不一样,他们都变成了null
最后
- 如果不留意JSON数据,本来想传一个undefined给前(后端)的,发现永远收不到,那就要思考是不是JSON数据的问题了。踩过的坑一定要填好,不然下一次还会不留意的踩到。
- json的应用场景可用于mongodb类的数据库,还有必要的导出文件需求的时候使用JSON格式也很快速处理
- 常用的数据传递除了JSON外还有 XML(用标签去划分的),YAML(用缩进来划分的),Go Struct