跳转至

JSON

概述

  JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式。它基于ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON语法

JSON语法规则

  在JS语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:

  1. 对象表示为键值对
  2. 数据由逗号分隔
  3. 花括号保存对象
  4. 方括号保存数组

JSON键/值对

  JSON键值对是用来保存JS对象的一种方式,和JS对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号""包裹,使用冒号:分隔,然后紧接着值:

{"firstName": "John"}
这很容易理解,等价于这条JavaScript语句:
{firstName : "John"}

JSON与JS对象的关系

  很多人搞不清楚JSON和Js对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解: JSON是JS对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。 如:

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

JSON和JS对象互转

  要实现从对象转换为JSON字符串,使用JSON.stringify()方法:

var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
要实现从 JSON 转换为对象,使用 JSON.parse() 方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}

基础实例

  简单地说,JSON可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在 PHP中,可以将JSON还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用JSON将数组转化为字符串。

表示对象

JSON最常用的格式是对象的 键值对。例如下面这样:

{"firstName": "Brett", "lastName": "McLaughlin"}

表示数组

和普通的JS数组一样,JSON表示数组的方式也是使用方括号。

{
    "people": [{
        "firstName": "Brett",
        "lastName": "McLaughlin"
    },{
        "firstName": "Jason",
        "lastName": "Hunter"
    }]
}
  这不难理解。在这个示例中,只有一个名为 people的变量,值是包含两个条目的数组,每个条目是一个人的记录,其中包含名和姓。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示更过多的值(每个值包含多个记录)。

  在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,也可以使用不同方式表示同一事物。 如前面所说,除了对象和数组,你也可以简单地使用字符串或者数字等来存储简单的数据,但这样并没有多大意义。

在HomeBridge配置中的例子

{
    "bridge": {
        "name": "HomeBridge",    
        "username": "00:00:00:00:00:01",
        "port": 58881,
        "pin": "111-00-001"
    },
    "accessories": [{
        "accessory": "RaspberryPiTemperature",
        "name": "客厅树莓派CPU温度"
    }, {
        "accessory": "MiGatewayFM",
        "name": "餐厅收音机",
        "ip": "192.168.88.155",
        "token": "3412465ba6c5d38fe33462a14b5c99f5"
    }],
    "platforms": [{
        "platform": "MiOutletPlatform",
        "deviceCfgs": [{
            "type": "MiPlugBase",
            "ip": "192.168.88.90",
            "token": "1587465ba6c5d38fe33462a14b5c99f5",
            "outletName": "主卧插座",
            "outletDisable": false,
            "temperatureName": "主卧插座温度",
            "temperatureDisable": false,
            "switchLEDName": "主卧插座LED开关",
            "switchLEDDisable": false
        }, {
            "type": "MiPlugBaseWithUSB",
            "ip": "192.168.88.91",
            "token": "7456465ba6c5d38fe33462a14b5c99f5",
            "outletName": "次卧插座",
            "outletDisable": false,
            "temperatureName": "次卧插座温度",
            "temperatureDisable": false,
            "switchUSBName": "次卧插座LED开关",
            "switchUSBDisable": false
        }]
    }, {
        "platform": "MiAqaraPlatform",
        "gateways": {
            "6409802da3b3": "02i44k56zrgg578b"
        }
    }]
}

JSON校验

  当JSON内容很多时,很容易陷入繁琐复杂的数据节点查找中。但是国人推出的在线工具在线校验格式化工具让众多程序员、新接触JSON格式的程序员更快的了解JSON的结构,更快的精确定位JSON格式错误。强烈建议每次写完JSON时进行校验并且格式化。
在线校验&格式化地址如下:
https://www.sojson.com/
https://www.bejson.com/