JSON数据格式 和对应方法的第二三参数的使用解析

什么是JSON

json 数据格式,不是编程语言。

很多编程语言都有针对json的解析器和序列化器

json是javascript语法的子级

xml 和json 比较

以前----------xml是互联网上传输结构化数据的实际标准

xml过于繁琐、囵余

与xml数据结构解析成dom文档摈弃去除数据麻烦

js 和 json区别

json字符串必须使用双引号(单引号报错)

json中的对象属性加双引号

json不能存放变量,没有声明、没有分号结尾

不能出现连个同名的属性(在同一个对象中)

undefined 不能作为json 对象

解析和序列化

JSON.stringify()/JSON.parse()

序列化为json字符串/解析成元素的js值

默认情况下JSON.stringify()输出的json字符串不不包括认可空空个字符串或者缩进(可通过json.stringify 的第三个参数修改)

在序列化对象时,所有函数和原型都会被有意忽略,值为undefined 的任何属性都会被跳过。

可以把json解析成javascript对象

JSON.stringify() 接收三个参数,后两个了省略

第二个参数是过滤器: 可以是数组或者函数

  • 数组:将返回包含数组中列出的属性
let obj={name:'ren',age: 18,gender:1}
JSON.stringify(obj,['name','age'])//{"name":"ren","age":18}   少了gender
  • 函数:接收两个参数(key,value)(起到拦截在操作的作用)
let obj={name:'ren',age: 18,gender:1}
JSON.stringify(obj,function(key,value){
    switch(key) {
        case 'name': return value +'ning';
        case 'age' : return undefined
    }
})//{"name":"ren","gender":1}   少了age 因为 json 序列化时默认会忽略 对象中的原型属性,函数和值为undefined 的属性

第三个参数是字符串换行

  • 当值为数值时: 表示每个级别缩进的空格数 最大为 10 超过的话 自动转换为 10
  • 当值为字符串时:标识 以这个字符串进行缩进
JOSN.stringify(obj,null, '--')
#json
{
 --"name": "ren",
 --"age": 14,
 --"gender": 1,
     
}

JSON.parse() 也有第二个参数 :

第二个参数 和 JSON.stringify()的第二个参数类似 为还原函数

如: 直接把json 格式的时间戳转换成 日期 在返回

#json
{
 --"time": 454351342143,
 --"age": 14,
 --"gender": 1,
     
}
 JSON.parse(obj,function(key, value) {
     if(key == 'time') {
         return new Date(value)
     }
 })

eval()和 json()

早期的json解析器是eval()函数

旧版中使用eval()对json数据结构求职存在风险,可能会执行一些恶意代码

由于json是javascript语法的子级,因此eval()函数 可以解析,解释并且返回javascript 对象和数组

ECMAScript5对解析json的行为进行规范

定义了全局对象JSON

支持ie8+

小结:

json 是轻量级数据格式,简化表示复杂数据结构的工作量。xml能做到的 json也能做到,简单不繁琐

ECMAScript5定义了全局JSON对象,支持ie8+

上一篇:json 对象 stringify parse


下一篇:vue post application/x-www-form-urlencoded传参的解决方案