bantouyan-json库是用来解析与编码Json数据的Java库,该库按照Json标准RFC4627编写,能够实现字符串与Json实例的相互转换,可以读取Reader得到Json实例,或将Json实例写入到Writer,还能将Collection与Map对象转换为Json实例。
RFC4627定义了Json的六种类型,分别是Array、Object、String、Number、Boolean(常量true与false)与Null(常量null)。在bantouyan-json库中,这些类型有枚举类型JsonType定义,其中Number被拆分为Integer与Float,非别表示整数与浮点数。这些类型的对应关系如下表所示:
RFC类型 |
JsonType |
Class |
实际存储类型 |
注释 |
Array |
ARRAY |
JsonArray |
ArrayList |
|
Object |
OBJECT |
JsonObject |
HashMap |
|
String |
STRING |
JsonPrimitive |
java.lang.String |
|
Number |
INTEGER |
JsonPrimitive |
java.lang.Long |
|
Number |
FLOAT |
JsonPrimitive |
java.lang.Double |
不包括Infinity与NaN |
Boolean |
BOOLEAN |
JsonPrimitive |
java.lang.Boolean |
对应常量true与false |
Null |
NULL |
JsonPrimitive |
java.lang.String |
对应常量null |
INTEGER使用类型long存储整数,FLOAT使用类型double存储浮点数,但是,Java浮点数常量正负INFINITY与NaN存储为STRING类型,因为按照RFC4627这三个常量的字面量不符合Number的定义。
在bantouyan-json库中,JsonArray、JsonObject与JsonPrimitive有一个共同的超类Json,Json是一个抽象类,定义了这些类的一些共同特征,如Type、子元素的个数等,还提供了一些静态方法用来生成Json实例。
在解析、处理、编码Json的过程中,总会发生这样或那样的错误,为此,定义了JsonException异常。如果在处理Json实例过程中产生了异常,如存取类型不正确,Json实例内出现了循环引用等,或在解析String、Reader或Java Map、 Collection为Json实例过程中产生了错误,都会抛出JsonException异常。JsonException异常都属于RuntimeException,不必要时可以不予捕获。
在解析Collection或Map为Json实例的过程中,如果遇到普通的Java Class,bantouyan-json库就无法确定该如何解析这些普通类的对象。为此,json库中又定义了一个名为Jsonable的接口,该接口只有一个返回Json实例的方法generateJson()。故当解析Collection或Map时,如果遇到Jsonable的实例,就会调用所继承的generateJson()方法生成Json实例。
除了接口Jsonable外,bantouyan-json库还定义了另外一个接口JsonParser,也用于将Collection或Map的转换。与Jsonable只负责把自己转换为Json实例不同,JsonParser负责把其他的Java对象转换为Json实例。当我们需要把非自己编写的Java类转换为Json实例时,JsonParser非常有用。
特别警告:Json实例内部不允许出现循环引用,即Json实例内部,任何一个元素(包括顶层实例),都不能被其子元素或子元素的子元素引用,否则会引起一些方法出现异常或错误。因为从现实意义上讲,Json内部不会出现循环引用,但编写代码时可能有意无意的制造出有循环引用的实例。
相关阅读:
解析Json——bantouyan-json库概述
解析Json——Json类的静态方法
解析Json——Json类的实例方法
解析Json——操纵JsonObject
解析Json——操纵JsonArray
分享到:
相关推荐
JSON Schema 生成库——json-schema-inferrer(java版).rar
JSON Schema 校验库——json-schema-validator(java版本).rar
编译好的 windows 版的 json-c-0.8 库。压缩包里面包含三个文件夹..\include,..\lib,..\src,”lib\“下有.lib和.dll。要使用该库,需要包含 json.h, json_object.h, json_tokener.h.
json-c-0.12.1.tar.gz,json-c库离线安装包
jquery和struts2结合使用的jar包
json-lib-2.4-jdk15所需全部JAR包,资源清单 json-lib-2.4-jdk15.jar 依赖: ezmorph-1.0.6.jar commons-beanutils-1.8.3.jar commons-lang-2.5.jar morph-1.1.1.jar commons-logging-1.1.1.jar commons-collections-...
JSON-lib包json-lib-0.8.jar和json-lib-0.9.jar包
json-lib是java工程中常用到的json解析工具,使用简单灵活,本压缩包中包括的文件有(使用json-lib必备的jar包): commons-beanutils-1.8.3.jar commons-collections-3.2.1.jar commons-lang-2.6.jar commons-...
json-simple-1.1.jar json-simple-1.1-sources.jar (json-simple-1.1.jar)&(json-simple-1.1-sources.jar).jar (json-simple-1.1.jar)&(json-simple-1.1-sources.jar).jar
里面包含json-lib所需的全部jar文件. json-lib-2.1-jdk15.jar ezmorph-1.0.3.jar commons-beanutils.jar commons-collections-3.2.1.jar commons-lang-2.4.jar commons-logging-1.1.1.jar
C#解析Json开源库-Newtonsoft.Json.zip
java操作json文件的6个包。缺少其一都容易报错。亲测可用,直接导入项目即可 1. commons-beanutils-1.8.0 2. commons-collections-3.2.1 3. commons-lang-2.6 4. commons-logging-1.1.1 ...6. json-lib-2.4-jdk15
json-lib-2.3-jdk15开发包和所有依赖包
json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例
最新版axios入门教程——2.02-json-server的介绍与服务搭建(Av756328321,P2).rar
Android开发-Volley-解析Json使用方法-完整Demo-AndroidStudio http://blog.csdn.net/iwanghang/article/details/52241233
json-smart-2.0-RC3.jar 亲测,可用!
json解析、构筑。项目语言c语言。。。。。
commons-beanutils-1.8.0.jar commons-collections.jar commons-lang-2.4.jar commons-logging-1.1.jar ezmorph-1.0.4.jar json-lib-2.3-jdk15.jar jsonplugin-0.32.jar
jar包如下:commons-beanutils-1.7,commons-collections,commons-lang,commons-logging-1.1.1,ezmorph, gson-2.2.1,gson-2.2.1-sources,json-lib-2.2.2-jdk15