JSON简介
概述
JSON(JavaScript Object Notation)是一种由道格拉斯·克罗克福特构想设计、轻量级的数据交换语言,以文字为基础,且易于让人阅读。
尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。
JSON 数据格式与语言无关,脱胎于 JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。
语法简介
JSON是一种轻量级的文本数据交换格式。
举个例子,你要表达一则信息,比如本文的作者是kk,可以说作者=kk,也可以写成{“作者”:”kk”}这样的数据交换格式。写成什么样子无所谓,只要接收信息的人能听懂就行。
JSON就是这个意思,它用{key:value}这样的格式表达信息,不仅轻量,而且容易解析。
key是这个JSON数据的名字,用一个字符串来表示。value是值,可以是一个字符串、一个数字、一堆数据(数组)、空值或者真假,甚至是另一个JSON数据。
- 字符串 {“name”:”guoguo”}
- 数字 {“age”=18}
- 真假 {“handsome”:true}
- 另一个JSON数据 {“game”:{“name”:”Clash Royale”,“producer”:”supercell”},只需要在”值”的位置再填一个大括号描述的JSON数据就可以了
- 一堆数据 {“articles”:[{“title”:”一步一步写爬虫之正则表达式”,”author”:”果果”},{“title”:”一步一步写爬虫之抓包”,”author”:”果果”}],用中括号把一个一个的value括起来,就成了一堆数据了
JSON的解析
JSON如此流行,导致各种语言都有相应版本的JSON工具。比如Python自带的json模块,比如Java版本的Gson,来自Google。
JSON工具一般有两个功能。
一是解析,输入一串JSON格式的字符串,key和value的集合,你可以根据key,很容易的找到value。比如我们爬虫里,解析这个JSON之后,只要知道key是”content_url”,就能立刻找到它对应的URL。
二是编码。给你一串key和value的信息,能自动变成JSON标准的格式,一般服务器会用到。
JSON的意义
类与对象
自从有了面向对象,程序员就喜欢上了对象这个东西。
对象可以封装,满足程序员的洁癖;也可以继承 ,满足程序员的懒惰。因此每次接到需求,都先要把用到的所有现实里的东西都抽象成对象。
一个对象其实就是一块内存,存储着属于本对象的一些数据。
当然,它也会从“类”那里得到很多“方法”,这些方法大多数是来对自身的数据做一些逻辑上的操作。
一个例子
有一种对象,这个对象没有什么特别的方法,唯一存在的意义就是用来存储数据。
这个对象在存储数据的时候用起来很方便,但是在传输数据的时候可就遇到问题了。
举个例子,微信服务器上有一个对象“文章”,就是专门原来存储文章的。这个对象有很多成员变量,比如“标题”、“作者”、“正文”、还有“留言”,每个变量可以存储一部分数据。
现在你在微信客户端上请求这篇文章,如何才能把这个“文章”对象通过网络从微信服务器原封不动的传输过来呢?
我们知道,HTTP协议是基于文本的,它已经屏蔽了底层的比特数据流,转而使用更高级的“字符串”来传输数据。
如果用HTTP协议来传输“对象”的话,你就得想办法把“对象”转换成“字符串”,而且接收端必须能够按照一定的规则把收到的“字符串”再转换成“对象”,这样才能达到“传输对象”的目的。
为此,程序员发明了JSON,它更像是一种格式。
把一个对象拆开,每一个成员变量变成了key=value的形式写成字符串,最后用大括号包起来,拿到网络上传输,这个过程叫序列化。
客户端收到这个JSON字符串之后,再按照相反的规则,把它拆开,取出里面所有的key=value,包装成一个对象,这个过程叫反序列化,也就是JSON的解析。
小结
JSON就是为了解决“对象”在网络上传输的问题而诞生的。这时候你再看它的英文名JavaScript Object Notation,JavaScript的“对象”标记法,也就很好理解。
应用领域
WEB开发
JSON最开始被广泛的应用于WEB应用的开发。不过目前JSON使用在JavaScript、Java、Node.js应用的状况比较多,PHP、C#等开发的WEB应用主要还是使用XML。
NoSQL数据库
相对于传统的关系型数据库,一些基于文档存储的NoSQL非关系型数据库选择JSON作为其数据存储格式,比较出名的产品有:MongoDB、CouchDB、RavenDB等。
还没有评论,来说两句吧...