• JS JSON


    博文分别引用自:菜鸟教程廖雪峰老师的JS教程
    非常感谢!!

    简介

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

    JSON内置数据类型

    在JSON中,一共就这么几种数据类型:

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

    以及上面的任意组合

    JSON格式

    JSON语法规则

    • 数据为 键/值 对。
    • 数据由逗号分隔
    • 大括号保存对象
    • 方括号保存数组

    JSON 数据 - 一个名称对应一个值

    JSON 数据格式为 键/值 对,就像 JavaScript 对象属性。

    键/值对包括字段名称(在双引号中),后面一个冒号,然后是值

    "name":"Runoob"
    

    JSON 对象

    JSON 对象保存在大括号内。

    就像在 JavaScript 中, 对象可以保存多个 键/值 对:

    {"name":"Runoob", "url":"www.runoob.com"}
    

    JSON 数组

    JSON 数组保存在中括号内。

    就像在 JavaScript 中, 数组可以包含对象:

    "sites":[
        {"name":"Runoob", "url":"www.runoob.com"}, 
        {"name":"Google", "url":"www.google.com"},
        {"name":"Taobao", "url":"www.taobao.com"}
    ]
    

    JSON字符集

    JSON的字符集必须是UTF-8,表示多语言就没有问题了。为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号""
    注意:键值对被双引号包括!!!!

    let a = '["1","2"]';
    let b = "['1','2']";
    console.log(JSON.parse(a));// Array [1,2]
    console.log(JSON.parse(b));// 报错
    

    序列化

    方法使用

    JSON.stringify(value[, replacer[, space]])
    

    参数说明:

    • value:
      必需, 要转换的 JavaScript 值(通常为对象或数组)。

    • replacer:
      可选。用于转换结果的函数或数组。
      如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
      如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样

    • space:
      可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如: 。

    返回值

    返回包含 JSON 文本的字符串。

    示例

    一、只写value的情况(常用)

    'use strict';
    
    var xiaoming = {
        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);
    console.log(s);
    

    二、value与space的情况

    JSON.stringify(xiaoming, null, '  ');
    

    结果

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

    三、使用value,replacer,space的情况

    1. replacer传入数组,选取要序列化参数
    JSON.stringify(xiaoming, ['name', 'skills'], '  ');
    

    结果

    {
      "name": "小明",
      "skills": [
        "JavaScript",
        "Java",
        "Python",
        "Lisp"
      ]
    }
    
    2. replacer传入函数,返回处理后的参数并序列化
    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.parse(text[, reviver])
    

    参数说明

    • text:必需, 一个有效的 JSON 字符串。
    • reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。

    返回值

    返回给定 JSON 字符串转换后的对象。

    反序列化字符串

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

    一、仅传入text的情况

    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
    

    二、同时传入reviver的情况

    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}
    
    
  • 相关阅读:
    ubuntu安装Elasticsearch
    PHP如何计算脚本执行时间
    MVC+EF中返回JSON的性能和安全问题
    博客园最新的一个模板样式有问题
    Entity Framework 批量插入很慢吗?我自己测试下
    用 Raphaël 绘制中国地图 + 显示数据
    博客园的手机版(非官方) MVC+jQuery.Mobile
    BitCovert,与移位,加法性能比较
    探讨微软ASP.NET AJAX控件开发技术(客户端)
    (十三)树【C++刷题】
  • 原文地址:https://www.cnblogs.com/tfxz/p/13251778.html
Copyright © 2020-2023  润新知