JSON

作者: Lawliet_cxy | 来源:发表于2019-04-09 15:38 被阅读0次

    JSON用于数据交换

    JSON数据类型:

    • number:和JavaScript的number一样
    • boolean:truefalse
    • string:字符串
    • null:空值
    • array:就是JavaScript的Array表达方式——[]
    • object:JavaScript中{ ...}表示方式

    JSON的字符集必须是UTF-8,而且为了统一解析,JSON的字符串必须用双引号" ",object的键也必须用双引号" "

    序列化

    使用JSON.stringify()将对象转化为JSON

    'use strict';
    
    var xiaoming = {
        name: '小明',
        age: 14,
        gender: true,
        height: 1.65,
        grade: null,
        'middle-school': '\"W3C\" Middle School',
        skills: ['JavaScript', 'Java', 'Python', 'Lisp']
    };
    

    把小明序列化为JSON格式的字符串:

    var s = JSON.stringify(xiaoming, null, '  ');
    console.log(s);
    

    结果:

    {
      "name": "小明",
      "age": 14,
      "gender": true,
      "height": 1.65,
      "grade": null,
      "middle-school": "\"W3C\" Middle School",
      "skills": [
        "JavaScript",
        "Java",
        "Python",
        "Lisp"
      ]
    }
    

    也可以用第二个参数来控制如何筛选对象的键值,例如:

    var s = JSON.stringify(xiaoming, ['name', 'skills'], '  ');
    console.log(s);
    

    结果变为:

    {
      "name": "小明",
      "skills": [
        "JavaScript",
        "Java",
        "Python",
        "Lisp"
      ]
    }
    

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

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

    上面的代码把所有值都改变为大写:

    {
      "name": "小明",
      "age": 14,
      "gender": true,
      "height": 1.65,
      "grade": null,
      "middle-school": "\"W3C\" MIDDLE SCHOOL",
      "skills": [
        "JAVASCRIPT",
        "JAVA",
        "PYTHON",
        "LISP"
      ]
    }
    

    如果需要精准序列化的时候,可以给xiaoming定义一个toJSON方法,直接返回JSON应该序列化的数据:

    var xiaoming = {
        name: '小明',
        age: 14,
        gender: true,
        height: 1.65,
        grade: null,
        'middle-school': '\"W3C\" Middle School',
        skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
        toJSON: function () {
            return { // 只输出name和age,并且改变了key:
                'Name': this.name,
                'Age': this.age
            };
        }
    };
    
    JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'
    
    

    反序列化

    拿到一个JSON格式的字符串,使用JSON.parse()把它变成一个JavaScript对象

    JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
    JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
    JSON.parse('true'); // true
    JSON.parse('123.45'); // 123.45
    

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

    'use strict';
    
    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}
    

    结果:

    {"name":"小明同学","age":14}
    

    相关文章

      网友评论

          本文标题:JSON

          本文链接:https://www.haomeiwen.com/subject/amwbiqtx.html