【Data Format】JSON

Posted by 西维蜀黍 on 2017-04-01, Last Modified on 2022-12-10

JSON 定义

JSON (JavaScript Object Notation) is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other serializable values).

It is a common data format with a diverse range of functionality in data interchange including communication of web applications with servers.

JSON is a language-independent data format. It was derived from JavaScript, but many modern programming languages include code to generate and parse JSON-format data. JSON filenames use the extension .json.

JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.

Data Format / Data Representation

什么是格式?就是描述你的数据要怎么表示的规范,举个栗子,有个人叫 “二百六”,身高 “160cm”,体重 “60kg”,现在你要将这个人的这些信息传给别人,你有很多种选择:

  • 姓名 “二百六”,身高 “160cm”,体重 “60kg”
  • name=“二百六”&height=“160cm”&weight=“60kg”
  • {“name”:“二百六”,“height”:160,“weight”:60}
  • ……

以上所有选择,传递的数据本质都是一样的,但是你可以看到形式是可以各式各样的,这称为 data representation。

这就是通过不同格式进行格式化后得到的数据,JSON 是其中一种的格式化的方式,也可以说是其中的一种格式,或者说一种 data representation。

SON 的构成

JSON 只由以下两种结构构成:

  • “名称 / 值” 对的集合(A collection of name/value pairs),通常称为对象(object)
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)

具体来说:

对象(object)

  • 每一个对象都由一个或多个无序的键值对(name/value)组成
  • 每一个对象由 “{” 开始,并以 “}” 结尾
  • 在对象的任何一个键值对中,键(name)都由字符串组成,且字符串需要用 “"” 和 “"” 包裹
  • 在对象的任何一个键值对中,键(name)之后都跟着一个 “:”,且键值对与键值对之间使用 “,“分隔

值(value)

值(value)可以是双引号括起来的字符串(string)、数值 (number)、truefalse、 null对象(object)或者数组(array)。而且,这些结构可以相互嵌套。

数组(array)

  • 数组是一个有序集合,以一个 “[” 开头,并以一个 “]” 结尾
  • 数组之间的每个元素以 “,” 分隔

字符串(string)

  • 字符串(string)是由双引号包围的任意数量 Unicode 字符的集合
  • 使用反斜线(“\”)转义
  • 一个字符(character)即一个单独的字符串(character string)。

数值(number)

JSON 与 XML

在 JSON 之前,有一个数据格式叫 XML,现在还是广泛在用,但是 JSON 更加轻量,如 XML 需要用到很多标签。

我将举一个例子,分别用 XMLJSON 来描述同一份数据:

<?xml version="1.0" encoding="utf-8"?>
<country>
    <name>中国</name>
    <province>
        <name>广东</name>
        <cities>
            <city>广州</city>
            <city>深圳</city>
            <city>珠海</city>
        </cities>
    </province>
    <province>
        <name>台湾</name>
        <cities>
            <city>台北</city>
            <city>高雄</city>
        </cities>
    </province>
    <province>
        <name>新疆</name>
        <cities>
            <city>乌鲁木齐</city>
        </cities>
    </province>
</country>
{
    "name": "中国",
    "province": [{
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}

你可以明显看到 XML 格式的数据中标签本身占据了很多空间,而 JSON 比较轻量,即相同数据,JSON 的格式占据的带宽更小,这在有大量数据请求和传递的情况下是有明显优势的。

Reference