zoukankan      html  css  js  c++  java
  • JSON——JavaScript 中的使用

    由于JSON非常简单,很快就风靡Web世界,并且成为ECMA标准。几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。

    把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。

    如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。

    序列化(JS对象——>JSON)

    让我们先把小明这个对象序列化成JSON格式的字符串:

    var xiaoming = {
        name: '小明',
        age: 14,
        gender: true,
        height: 1.65,
        grade: null,    'middle-school': '"W3C" Middle School',
        skills: ['JavaScript', 'Java', 'Python', 'Lisp']
    };
    
    JSON.stringify(xiaoming); 
    要输出得好看一些,可以加上参数,按缩进输出:
    JSON.stringify(xiaoming, null, '  ');

    结果:

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

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

    JSON.stringify(xiaoming, ['name', 'skills'], '  ');

    结果:

    {
      "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');
    // trueJSON.parse('123.45');
    // 123.45
    JSON.parse()还可以接收一个函数,用来转换解析出的属性:
    JSON.parse('{"name":"小明","age":14}', function (key, value) {
        // 把number * 2:
        if (key === 'name') {        return value + '同学';
        }    return value;
    }); // Object {name: '小明同学', age: 14}
  • 相关阅读:
    还贷的那些事V——等增幅还贷的计算
    计算机中的颜色X——两颜色的偏转值
    高亮显示不区分大小写的关键字——ASP
    一道算法题,看看大家的思路
    一道算法题,看看大家的思路(续)
    IQCar的实现II——解题思路
    IQCar的实现I——IQCar的介绍
    Flex画流程图
    jQuery源码研究01
    javascript笔记:javascript里面不同function定义的区别
  • 原文地址:https://www.cnblogs.com/zjfjava/p/6843137.html
Copyright © 2011-2022 走看看