![8857968bd0193f08d0da5871507acee6.png](https://i-blog.csdnimg.cn/blog_migrate/857e303492b422db760e4581150ee2e7.jpeg)
JSON(JavaScript对象表示法)是一种轻量级的数据交换格式。对于开发者来说这种数据格式是很容易读和写。同时对于机器来说容易解析和生成。它是基于1999年12月
Douglas Crockford's JavaScriptjavascript.crockford.com是基于上述的上面的一个子集。JSON是一种完全独立于语言的文本格式,但是使用了C语言家族的程序员熟悉的约定,包括C、C++、C#、Java、JavaScript、Perl、Python和许多其他。这些特性使得JSON称为了一种理想的数据交换语言。
JSON是基于下面两种结构所创造的:
(1)一个基于name和value的集合。在不同的语言中,这个被认为是对象、记录、结构、字典、哈希表、关联数组等
(2)有序的值列表。在大多数语言中,这是作为数组、向量、列表或序列实现的。
它们是普通的数据结构。几乎所有现代编程语言都以某种形式支持它们。与编程语言可互换的数据格式也基于这些结构是有意义的。
在JSON中,它们是按照以下的形式出现的。
![33f746c9472f4de1234ddbbb4f2820a4.png](https://i-blog.csdnimg.cn/blog_migrate/66677e93fb89507d53868ed458aaab82.jpeg)
对象是一组无序的name/value对的形式出现,其中这个对象是以左花括号开头,以右花括号结尾,每个name后面都用冒号紧接着后面是value,多个name:value之间使用逗号分隔。
![51ef6ead4895daa557b1383dac379eb9.png](https://i-blog.csdnimg.cn/blog_migrate/eab886c59c7d9d0b719a3046111b0f58.jpeg)
一个数组是一个有序的值得集合。这个数组是以左中括号开始,以右中括号结束,其中里面的值用逗号分隔。
![a6a14cb235f154568cf66335989f76c4.png](https://i-blog.csdnimg.cn/blog_migrate/df42622727c401484f01acc3155a24f8.jpeg)
值可以是双引号中的字符串,也可以是数字,或者是真的、假的、空的,或者是对象或数组。这些结构可以嵌套。
![de2e393331edfeaaef4b9fcd7aca6b0e.png](https://i-blog.csdnimg.cn/blog_migrate/421eba35246af22a086caa70b8619c9d.jpeg)
字符串是由零个或多个Unicode字符组成的序列,用双引号括起来,使用反斜杠转义。字符表示为单个字符串。字符串非常类似于C或Java字符串。
![960bc7f540706ff7c85f688f1eed479f.png](https://i-blog.csdnimg.cn/blog_migrate/7669716ae9e64cd1fa17ba91fbb2ceea.jpeg)
数值类型也非常和C或者JAVA中的数值类型相似,但是这里不允许使用数值的八进制或者十六进制。
这个JAR包是基于JDK1.6-1.8编译的。里面主要包含下面一些类:
JSONObject.java: JSONObject可以通过一个字符串来解析文本或者JSONTokener创建一个类似于map的对象。该对象提供了操作其内容的方法和用于生成符合JSON的对象序列化。JSONArray.java: JSONArray可以通过一个字符串来解析文本或者JSONTokener创建一个类似于vector的对象。该对象提供了操作其内容的方法和用于生成符合JSON的对象序列化。
JSONTokener.java: JSONTokener可以将一段文本分解成独立令牌的序列。它可以通过String、Reader和InputStream来构造。
JSONException.java: 这个包抛出来的标准异常。
JSONPointer.java: 实现了JSON Pointer (RFC 6901). 支持字符串表示和URI片段表示形式的JSON指针
JSONPropertyIgnore.java: 注解类可以被用在Java Bean的getter方法上。当在bean方法上使用的时候,会被正常的序列化为一个JSONObject,它将getter重写为键名称逻辑,并强制从结果JSONObject中排除该属性。
JSONPropertyName.java: 注解类可以被用在Java Bean的getter方法上。当在bean方法上使用的时候,会被正常的序列化为一个JSONObject,它将getter重写为键名称逻辑。bean处理器将查看类层次结构。这意味着您可以在基类或接口上使用注释,并且即使getter在子类中被重写,注释的值也将被使用。
JSONString.java: The JSONString
接口有一个 toJSONString
方法,允许对象提供自己的序列化。
JSONStringer.java: The JSONStringer
构造JSON字符串的便捷工具。
JSONWriter.java: The JSONWriter
提供了通过writer来构造JSON文本的便捷工具。CDL.java: CDL
提供了JSON和逗号分隔列表之间的转换。
Cookie.java: Cookie
提供了JSON和cookie之间的转换。
CookieList.java: CookieList
提供了JSON和cookie列表之间的转换。
HTTP.java: HTTP
提供支持JSON和HTTP头部信息的转换。
HTTPTokener.java: HTTPTokener
继承JSONTokener
用来解析HTTP的头部信息。
XML.java: XML
提供了XML和JSON之间的转换。
JSONML.java: JSONML
提供了知识JSONML和XML之间的转化功能。
XMLTokener.java: XMLTokener
继承JSONTokener
,用来解析XML文本。
单元测试被维护在一个分离的项目中,贡献的开发者可以从github上拉取代码。
stleary/JSON-Java-unit-testgithub.com![ec7b8c7f0a06788169961af2ec69a823.png](https://i-blog.csdnimg.cn/blog_migrate/a73861189978add0bdc176849375ebc9.jpeg)
这个包中的数值类型是按照
ECMA-404: The JSON Data Interchange Formatwww.ecma-international.org和
The JavaScript Object Notation (JSON) Data Interchange Formattools.ietf.org这个包是完全支持 Integer
, Long
, 和 Double
的 Java 类型. 部分支持 BigInteger
、 BigDecimal
数值在JSONObject
和JSONArray
对象中,以get()、opt()和put()API方法的形式提供。