JSON,轻量级的数据格式

目录 技术

JSON简介

JSON的全称是JavaScript Object Notation,是互联网中应用非常广泛的轻量级数据存储格式。JSON基于JavaScript的一个子集。JSON完全独立于语言,也就是说它并不是像MATLAB的.mat或者R的.Rdata这样的依赖于具体语言的数据格式。在主流的JAVA/RUBY/Python/C/C++甚至MATLAB中都有支持JSON的模块。

JSON不同于我们通常见到的csv或者xlsx等数据文件。JSON通常被用来提供JS和服务器进行数据传输,但是也完全可以作为像csv这样通用的数据格式来使用。

 

JSON与XML

JSON经常会被拿来和XML作比较。这两个语言种针对web的数据格式。JSON的优点在于轻量,标准唯一,并且能和JavaScript无缝连接。XML的优点在于结构非常清晰,配合上XPath非常好解析。现阶段这两种数据格式都广泛存在,使用上的也是根据实际情况各有优劣。

 

JSON的数据结构

JSON数据有只有两种结构。第一种叫“名称/值”序对,有点类似python的字典(dict)格式。第二种叫值的有序列表,有点类似python的列表(list)格式。

 

JSON的数据模型

下面来看看JSON的数据格式的模型。一个JSON文件中能够包含多个JSON对象,也就是多个以{为开头以}为结尾的数据。{data}这样一整块我们称之为一个对象(或者更形象化一点的叫法,一个物件,object)。

 

每个对象中,都会有若干个“名称/值”序对。也就是说,一个对象,就是若干个“名称/值”序对的集合。注意,集合的特点是无序且唯一,所以这些“名称/值”序对是无序且唯一的。

 

JSON支持哪些类型的值呢?JSON总共支持六种类型的值:string(字符串)、number(数值)、object(对象)、array(值的有序列表)、bool(true、false)、null(空值)。

 

这六种类型中,需要注意的是object(对象)类型和array(有序列表)类型。

JSON的对象中的“名称/值”序对中的“值”,可以是对象,这里可以理解为子对象,也就是说对象里面嵌套对象。

JSON的对象中的“名称/值”序对中的“值”,也可以是有序列表。值的有序列表中又可以包含JSON所支持的类型的值。

 

也就是说,对于每个“名称/值”序对中的“值”,可以就简简单单是一个值,例如一个字符/数值,也可以是多个值组成的的有序列表(注意这里是“有序”“列表”),也可以是一个JSON对象。

 

JSON实际数据分析

我们看一个知乎日报的api,浏览器中打开 http://news-at.zhihu.com/api/3/sections,就可以看到一个完整的JSON文件。下面来分析这个JSON文件。

这个JSON文件中包含一个JSON对象,也就是最外层的{}结构。 这个JSON对象中,又包含一个“名称/值”序对,这个序对的名称叫data,这个序对的值,是一个有序列表,也就是[]中的东西。这个有序列表中,又包含三个JSON对象(嵌套的子对象,里面的{}结构)。这三个对象结构是一样的,拿第一个对象来说,这个对象中又包含四个“名称/值”序对。比如"description"就是个名称,"看别人的经历,理解自己的生活"就是对应这个名称的值,这个值的类型是字符串。又比如"id"是个名称,1是这个名称的对应的值,这个值是个数值。这个文件大概就是一个很典型的JSON文件了。JSON文件就是这样一个模型,非常简单。