美文网首页JavaScript 从零开始
[JavaScript] (Day-13) - JSON 数据交

[JavaScript] (Day-13) - JSON 数据交

作者: 已重置2020 | 来源:发表于2017-07-01 07:39 被阅读9次
    Discontent is the first step in progress. 不知足是前进中的第一步。

    JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。

    JSON 实际上是JavaScript的一个子集。在JSON中,一共就这么几种数据类型:

    • number:和 JavaScript 的 number 完全一致;
    • boolean:就是 JavaScript 的 truefalse
    • string:就是 JavaScript 的 string
    • null:就是 JavaScript 的 null
    • array:就是 JavaScript 的 Array 表示方式——[]
    • object:就是 JavaScript 的{ ... }表示方式。

    JSON 还定死了字符集必须是UTF-8,表示多语言就没有问题了。为了统一解析,JSON的字符串规定必须用双引号""Object的键也必须用双引号""

    JavaScript 内置了 JSON 的解析


    序列化

    对象序列化成 JSON 格式的字符串

    var person = {
        name: "Eric",
        age: 28,
        gender: "Male",
        height: 1.65,
        grade: null,
        married: true
        childs: ["Baby","Vicy"]
    };
    
    JSON.stringify(person); // '{"name":"Eric","age":28,"gender":"Male","height":1.65,"grade":null,married: true,"childs":["Baby","Vicy"]}'
    

    要输出得好看一些,可以加上参数,按缩进输出:

    JSON.stringify(person, null, '  ');
    
    
    {
      "name": "Eric",
      "age": 28,
      "gender": "Male",
      "height": 1.65,
      "grade": null,
      "married": true
      "childs": [
        "Baby",
        "Vicy"
      ]
    }
    

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

    JSON.stringify(person, ["name", "childs"], '  ');
    
    
    
    {
      "name": "Eric",
      "childs": [
        "Baby",
        "Vicy"
      ]
    }
    

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

    function convert(key, value) {
        if (typeof value === 'string') {
            return value.toUpperCase();
        }
        return value;
    }
    
    JSON.stringify(person, convert, '  ');
    
    
    {
      "name": "ERIC",
      "age": 28,
      "gender": "MALE",
      "height": 1.65,
      "grade": null,
      "married": true
      "childs": [
        "BABY",
        "VICY"
      ]
    }
    
    

    反序列化

    JSON格式的字符串,我们直接用JSON.parse()把它变成一个JavaScript对象

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

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

    JSON.parse('{"name":"Vivian","age":18}', function (key, value) {
        // 拼接知道字符串
        if (key === "name") {
            return value + " is beautiful";
        }
        return value;
    }); // Object {name: "Vivian is beautiful", age: 18}
    

    相关文章

      网友评论

        本文标题:[JavaScript] (Day-13) - JSON 数据交

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