咏竹莉
where there is a will,there is a way

json 是一种数据交换格式。

在JSON中,一共有几种数据类型:

  • number:   和js的 number完全一致;
  • boolean:   就是js中的true 或 false;
  • string:    就是js的string;
  • null:        就是js的null
  • array:      就是js的Array 表示方式--[]
  • object:  就是js的{...}  表示方式

 

1.  序列化

JSON的字符串规定必须用双引号"" , Object的键也必须用双引号""

把一个js对象序列化成JSON格式的字符串:

我们通常所说的“json字符串” , 只有两种: json对象、json数组

var xiaozhu = {
    name: 'xiaozhu',
    age: 18, 
    height: 1.6,
    grade:  null,
    skills: ['Javascript','Html','Js']
}
var s = JSON.stringify(xiaozhu)
console.log(s);              //   {"name":"xiaozhu","age":18,"height":1.6,"grade":null,"skills":["Javascript","Html","Js"]}

 

第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array: 

  var s1 = JSON.stringify(xiaozhu,['name','skills'], '  ')
  console.log(s1); 
  {
      "name": "xiaozhu",
      "skills": [
                "Javascript",
                "Html",
                "Js"
            ]
  }
        
       

 

还可以传入一个函数,这样对象的每个键值都会被函数有限处理

function convert(key, value) {
    if (typeof value === 'string') {
        return value.toUpperCase();
    }
    return value;
}

JSON.stringify(xiaozhu, convert, '  ');

上面的代码把所有属性值都变成大写:

{
  "name": "XIAOZHU",
  "age": 18,
  "height": 1.6,
  "grade": null,
  "skills": [
    "JAVASCRIPT",
    "HTML",
    "JS"
  ]
}

 

2. 反序列化

拿到一个JSON格式的字符串,直接用JSON.parse()把它变成一个js对象:

console.log(JSON.parse('[1,2,3,true]'));     //  [1, 2, 3, true]
console.log(JSON.parse('{"name": "xiaozhu", "age": 14}'));   // {name: "xiaozhu", age: 14}
console.log(JSON.parse('true')); // true

 

JSON.parse() 还可以接收一个函数,用来转换解析出的属性:

var obj = JSON.parse('{"name": "小明", "age": 14}', function(key,value){
    if (key === 'name') {
        return value + '同学';
    }
   return value;
});

console.log(JSON.stringify(obj));   // {name: '小明同学',  age: 14}

 

posted on 2021-06-28 17:14  咏竹莉  阅读(94)  评论(0)    收藏  举报