JSON(JavaScript Object Notation)技术总结

1. JSON概述

JSON是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON可以表示四种基本类型(字符串、数字、布尔值、NULL)和两个结构化类型(对象和数组)。 对象是零个或多个名称/值的无序集合对,其中名称是字符串,值是字符串,数字,布尔值、空值、对象或数组。

数组是由零个或多个值组成的有序序列。

举例:

  {
  "Image": {
      "Width":  800,
      "Height": 600,
      "Title":  "View from 15th Floor",
      "Thumbnail": {
          "Url":    "http://www.example.com/image/481989943",
          "Height": 125,
          "Width":  100
      },
      "Animated" : false,
      "IDs": [116, 943, 234, 38793]
    }
}

[
  {
     "precision": "zip",
     "Latitude":  37.7668,
     "Longitude": -122.3959,
     "Address":   "",
     "City":      "SAN FRANCISCO",
     "State":     "CA",
     "Zip":       "94107",
     "Country":   "US"
  },
  {
     "precision": "zip",
     "Latitude":  37.371991,
     "Longitude": -122.026020,
     "Address":   "",
     "City":      "SUNNYVALE",
     "State":     "CA",
     "Zip":       "94085",
     "Country":   "US"
  }
]

这些是JSON格式吗?

"Hello world!"

42

true

"True"

1.3e-10

下面这些是JSON格式吗

True

Python

NULL

{key:"value"}

不是

我们可以用python语言提供的json工具进行验证, 将字符串保存到a.json的文件中,然后输入:

python -m json.tool a.json

根据输出,我们可以确定字符串是否是JSON字符串。

2, 值

JSON值必须是对象、 数组、数字或字符串,或者以下其一:

false
null
true

这三个必须精确匹配,是全部小写,不能是大写。

3, 对象

对象结构表示为一对大括号,围绕着零个或多个名称/值对(或成员)。名称是字符串。每个名称后面都有一个冒号,将名称与值分隔开 。一个逗号将值与后面的名称分隔开。对象中的名称应该是惟一的。

示例:

{
    "Width":  800,
    "Height": 600,
}

注意,对象中的名称/值对中的名称在该对象中应该是唯一的,当对象中的名称不惟一时,接收此类对象的软件的行为是不可预测的。某些JSON解析库将解析失败。

4,数组

数组结构表示为围绕零或多个值(或元素)的方括号。元素之间用逗号分隔。不要求数组中的值具有相同的类型。

示例:

[]
["0"]
["0", 1]

5. 数字

十进制数字,可以是小数,也可以是负数,可以用科学记数法表示数字。

6, 空间优化

对于空间优化,我们可以对key值进行缩减,这样传输带宽就会减少。例如:

{"attribute_id":"0x00020000","attr_time":"1557972654"}

改为

{"a_id":"0x00020000","a_time":1557972654}

将名称值缩减,另外属性值改为数字,53字节缩减到41字节,含义完全不变。