java中处理JSON的java开源异常处理框架工具都有些什么?那个比较好用

1.是一个基于Java的开源报表工具,它可以在Java环境下像其他IDE报表工具一样来制作报表。JasperReports支持PDF、HTML、XLS、CSV和XML文件输出格式。JasperReports是当前Java开发者最常用的报表工具。
2.是一个以工作流为核心的、强调面向解决方案而非工具组件的BI套件,整合了多个开源项目,目标是和商业BI相抗衡。它偏向于与业务流程相结合的BI解决方案,侧重于大中型企业应用。它允许商业分析人员或开发人员创建报表,仪表盘,分析模型,商业规则和BI流程。
功能和特点
工作流引擎:Shark and JaWE
数据库:Firebird RDBMS
集成管理和开发环境:Eclipse
报表工具:Eclipse BIRT
ETL工具:Enhydra/Kettle
OLAP Server:Mondrian
OLAP展示:JPivot
数据挖掘组件:Weka
应用服务器和Portal服务器:JBoss
单点登陆服务及LDap认证:JOSSO
自定义脚本支持:Mozilla Rhino Javascript 脚本处理器
3.是一个基于Web的报表解决方案,可为用户提供通过浏览器查看动态创建的PDF、HTML或XLS格式报表的能力。OpenReports使用Java开发的,并使用JasperReports作为报表生成引擎。
4.(现改名为Pentaho Reporting)是一个用来生成报表的Java类库。它为Java应用程序提供一个灵活的打印功能并支持输出到打印机和PDF,Excel,HTML和XHTML,PlainText,XML和CSV文件中。
5.是基于Jakarta POI API的Excel报表生成工具,可以生成精美的Excel格式报表。它采用标签的方式,类似JSP标签,写一个Excel模板,然后生成报表,非常灵活,简单!
6.是一个Eclipse-based开放源代码报表系统。它主要是用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成:一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。BIRT同时也提供一个图形报表制作引擎。
阅读(...) 评论()JAVA(26)
有效选择七个关于Java的JSON开源类库
April&4,&2014&By&Constantin&Marian&Alin
翻译:无若
&(英语原文:/lang/jscript/top-7-open-source-json-binding-providers-available-today.html)
JSON是JavaScript&Object&Notation的缩写,是一种轻量级的数据交换形式,是一种XML的替代方案,而且比XML更小,更快而且更易于解析。因为JSON描述对象的时候使用的是JavaScript语法,它是语言和平台独立的,并且这些年许多JSON的解析器和类库被开发出来。在这篇文章中,我们将会展示7种Java&JSON类库。基本上,我们将会试着把Java对象转换JSON格式并且存储到文件,并且反向操作,读JSON文件转换成一个对象。为了让文章更有意义,我们将会测量每一种JSON类库在不同情况下的处理速度。
&(一)类库介绍及其使用
(1)使用Jackson类库
第一个介绍的是Jackson类库,Jackson库是一个“旨在为开发者提供更快,更正确,更轻量级,更符合人性思维”&的类库。Jackson为处理JSON格式提供了三种模型的处理方法。
1、流式API或者增量解析/产生(&incremental&parsing/generation):读写JSON内容被作为离散的事件。
2、树模型:提供一个可变内存树表示JSON文档。
3、数据绑定(Data&binding):实现JSON与POJO(简单的Java对象(Plain&Old&Java&Object))的转换
我们感兴趣的是Java对象与JSON的转换,因此,我们将集中于第三种处理方法。首先我们需要下载Jackson。Jackson的核心功能使用三个类库,分别是jackson-core-2.3.1,&jackson-databind-2.3.1和jackson-annotations-2.3.1;&三个类库的下载都来自于Maven仓库,给出地址:
(译者注:在中,正好是三个类库的文件夹)
现在,让我们来工作吧,为了从Java对象中获得一个一个复杂的JSON对象,我们将会使用下面的类去构造一个对象。同样的Java对象将会被用于这篇文章的所有的类库中。
public&class&JsonThirdObject&{
&&&&&&&&&&private&int&age&=&81;
&&&&&&&&&&private&String&name&=&&Michael&Caine&;
&&&&&&&&&&private&List&String&&
&&&&&&&&&&public&JsonThirdObject()&{
&&&&&&&&&&&&this.messages&=&new&ArrayList&String&()&{
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&You&wouldn't&hit&a&man&with&no&trousers..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&At&this&point,&I'd&set&you&up&with&a..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&You&know,&your&bobby&dangler,&giggle&stick,..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&};
&&&&&&&&&&}
&&&&&&&&&&//&Getter&and&setter
public&class&JsonSecondObject&{
&&&&&&&&&&private&int&age&=&83;
&&&&&&&&&&private&String&name&=&&Clint&Eastwood&;
&&&&&&&&&&private&JsonThirdObject&jsnTO&=&new&JsonThirdObject();
&&&&&&&&&&private&List&String&&
&&&&&&&&&&public&JsonSecondObject()&{
&&&&&&&&&&&&this.messages&=&new&ArrayList&String&()&{
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&This&is&the&AK-47&assault..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&Are&you&feeling&lucky..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&When&a&naked&man's&chasing&a..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&};
&&&&&&&&&&}
&&&&&&&&&&//&Getter&and&setter
public&class&JsonFirstObject&{
&&&&&&&&&&private&int&age&=&76;
&&&&&&&&&&private&String&name&=&&Morgan&Freeman&;
&&&&&&&&&&private&JsonSecondObject&jsnSO&=&new&JsonSecondObject();
&&&&&&&&&&private&List&String&&
&&&&&&&&&&public&JsonFirstObject()&{
&&&&&&&&&&&&this.messages&=&new&ArrayList&String&()&{
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&I&once&heard&a&wise&man&say..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&Well,&what&is&it&today?&More..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&Bruce...&I'm&God.&Circumstances&have..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&};
&&&&&&&&&&}
&&&&&&&&&&//&Getter&and&setter
public&class&Json&{
&&&&&&&&&&private&int&age&=&52;
&&&&&&&&&&private&String&name&=&&Jim&Carrey&;
&&&&&&&&&&private&JsonFirstObject&jsnFO&=&new&JsonFirstObject();
&&&&&&&&&&private&List&String&&
&&&&&&&&&&public&Json()&{
&&&&&&&&&&&&this.messages&=&new&ArrayList&String&()&{
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&Hey,&maybe&I&will&give&you..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&Excuse&me,&I'd&like&to..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&add(&Brain&freeze.&Alrighty&Then&I&just..&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&};
&&&&&&&&&&}
&&&&&&&&&&//&Getter&and&setter
上面的Java对象转换成JSON格式是下面这样的。
&&&&age&:52,
&&&&name&:&Jim&Carrey&,
&&&&jsnFO&:{
&&&&&&&age&:76,
&&&&&&&name&:&Morgan&Freeman&,
&&&&&&&jsnSO&:{
&&&&&&&&&&age&:83,
&&&&&&&&&&name&:&Clint&Eastwood&,
&&&&&&&&&&jsnTO&:{
&&&&&&&&&&&&&age&:81,
&&&&&&&&&&&&&name&:&Michael&Caine&,
&&&&&&&&&&&&&messages&:[
&&&&&&&&&&&&&&&&You&wouldn't&hit&a&man..&,
&&&&&&&&&&&&&&&&At&this&point,&I'd&set&you..&,
&&&&&&&&&&&&&&&&You&know,&your&bobby&dangler..&
&&&&&&&&&&&&]
&&&&&&&&&},
&&&&&&&&&&messages&:[
&&&&&&&&&&&&&This&is&the&AK-47&assault..&,
&&&&&&&&&&&&&Are&you&feeling&lucky..&,
&&&&&&&&&&&&&When&a&naked&man's&chasing&a..&
&&&&&&&&&]
&&&&&&&messages&:[
&&&&&&&&&&I&once&heard&a&wise&man..&,
&&&&&&&&&&Well,&what&is&it&today?&More..&,
&&&&&&&&&&Bruce...&I'm&God.&Circumstances&have..&
&&&&messages&:[
&&&&&&&Hey,&maybe&I&will&give&you&a&call..&,
&&&&&&&Excuse&me,&I'd&like&to&ask&you&a&few..&,
&&&&&&&Brain&freeze.&Alrighty&Then&I&just&heard..&
现在,让我们来看看怎么样把Java对象转换成JSON并且写入文件。Jackson使用一个ObjectMapper功能,我们第一步要做的是:
Json&jsonObj&=&new&Json();
ObjectMapper&mapper&=&new&ObjectMapper();
然后,我们将会使用这个ObjectMapper直接写入值到文件。
System.out.println(&Convert&Java&object&to&JSON&format&and&save&to&file&);
&&&&&mapper.writeValue(new&File(&c:\\jackson.json&),&jsonObj);
}&catch&(JsonGenerationException&e)&{
}&catch&(JsonMappingException&e)&{
}&catch&(IOException&e)&{
现在,我们有了一个JSON文件,但是,怎么样转回Java对象呢?我们可以这样做:
System.out.println(&Read&JSON&from&file,&convert&JSON&back&to&object&);
&&&&&jsonObj&=&mapper.readValue(new&File(&c:\\jackson.json&),&Json.class);
}&catch&(JsonGenerationException&e)&{
}&catch&(JsonMappingException&e)&{
}&catch&(IOException&e)&{
从上面的例子我们知道了JSON和Java对象的相互转换,在try-catch中总共也就两行,看起来不错是吧,但是它快么?我们将会在后面的文章中揭晓。
&(2)使用&Google-Gson类库
第二种就是&Google-Gson,我们立即开始讨论&,你或许更喜欢他的全名。Gson能实现Java对象和JSON之间的相互转换。甚至都不需要注释。Gson的特点:
1)提供简单的toJson()方法和fromJson()去实现相互转换。
2)可以从JSON中转换出之前存在的不可改变的对象。
3)扩展提供了Java泛型。
4)支持任意复杂的对象。
Gson就需要一个.jar文件,gson-2.2.4.jar,可以通过下载。下面是例子,把Java对象转换成JSON。
Json&jsonObj&=&new&Json();
Gson&gson&=&new&Gson();
System.out.println(&Convert&Java&object&to&JSON&format&and&save&to&file&);
try&(FileWriter&writer&=&new&FileWriter(&c:\\gson.json&))&{
&&&&&writer.write(gson.toJson(jsonObj));
}&catch&(IOException&e)&{
JSON转换成Java对象:
System.out.println(&Read&JSON&from&file,&convert&JSON&string&back&to&object&);
try&(BufferedReader&reader&=&new&BufferedReader(new&FileReader(&c:\\gson.json&)))&{
&&&jsonObj&=&gson.fromJson(reader,&Json.class);
}&catch&(FileNotFoundException&e)&{
}&catch&(IOException&e)&{
上面就是我们所有需要做的,接下来我们可以对&jsonObj&作进一步处理。当调用JSON操作的时候,因为Gson的实例化对象没有维持任何状态,我们可以重复使用一个对象为多个JSON序列化和反序列化操作。
(3)使用JSON-lib类库
类库是基于Douglas&Crockford的工作成果,能转换bean,map,集合(collection),java数组和XML转换成JSON并能反向转换成beans和动态bean(DynaBean)。JSON-lib类库的下载地址:&下面这些是依赖文件
(译者注:Douglas&Crockford是Web开发领域最知名的技术权威之一,ECMA&JavaScript2.0标准化委员会委员。被JavaScript之父Brendan&Eich称为JavaScript的大宗师(Yoda)。曾任Yahoo!资深JavaScript架构师,现任PayPal高级JavaScript架构师。他是JSON、JSLint、JSMin和ADSafe的创造者,也是名著《JavaScript:&The&Good&Parts》(中文版《JavaScript语言精粹》)的作者。撰写了许多广为流传、影响深远的技术文章,包括“JavaScript:世界上最被误解的语言”。Douglas&Crockford曾在著名的Lucasfilm电影公司任技术总监;在Paramount(派拉蒙)公司任新媒体高级总监;communities社区创始人兼CEO;State软件公司CTO。,Paypal宣布Douglas&Crockford加入Paypal。)
同样,让我们来把Java对象转成JSON。
Json&jsonObj&=&new&Json();
JSONObject&
System.out.println(&Convert&Java&object&to&JSON&format&and&save&to&file&);
try&(FileWriter&writer&=&new&FileWriter(&c:\\json-lib.json&))&{
&&&&&&&&&&json&=&JSONObject.fromObject(jsonObj);
&&&&&&&&&&json.write(writer);
}&catch&(IOException&e)&{
JSON转Java对象
System.out.println(&Read&JSON&from&file,&convert&JSON&string&back&to&object&);
try&(BufferedReader&reader&=&new&BufferedReader(new&FileReader(&c:\\json-lib.json&)))&{
&&&&&&&&&&jsonObj&=&(Json)&JSONObject.toBean(JSONObject.fromObject(reader),&Json.class);
}&catch&(IOException&ex)&{
这里有个问题,这些依赖关系会影响到性能吗?文章在下面揭晓。
&(4)使用Flexjson类库
是一个轻量级的库,能序列化和反序列化Java对象和JSON,允许深层和浅层对象的拷贝。深度拷贝意味着一个被Flexjson序列化的对象,它能让对象做到类似于延迟加载(lazy-loading)的技术,能让我们在对对象有需要时才提取。当我们想把整个对象写入到文件时,这不是一个好的情况,但是它知道需要才去做时,这是很好的。
Flexjson下载地址:&它不需要其他库就可以工作。下面是例子:Java对象转JSON。
Json&jsonObj&=&new&Json();
JSONSerializer&serializer&=&new&JSONSerializer();
System.out.println(&Convert&Java&object&to&JSON&format&and&save&to&file&);
try&(FileWriter&writer&=&new&FileWriter(&c:\\flexjson.json&))&{
&&&&&&&&&&serializer.deepSerialize(jsonObj,&writer);
}&catch&(IOException&e)&{
JSON转Java对象
System.out.println(&Read&JSON&from&file,&convert&JSON&string&back&to&object&);&
try&(BufferedReader&reader&=&new&BufferedReader(new&FileReader(&c:\\flexjson.json&))){&
&&&&jsonObj&=&new&JSONDeserializer&Json&().deserialize(reader);&
}&catch&(FileNotFoundException&e)&{
}&catch&(IOException&e)&{&
简单有效是吧!
(5)使用Json-io类库
有两个主要的类,一个读和一个写,排除了使用ObjectInputStream和&ObjectOutputStream两个类去读写。Json-io能序列化任意的Java对象图(graph)转变成JSON,并且能记忆完整的语义图(graph&semantics)和对象类型。下载地址:&
它不需要其他依赖。
例子:Java对象转JSON
Json&jsonObj&=&new&Json();
System.out.println(&Convert&Java&object&to&JSON&format&and&save&to&file&);
try&(JsonWriter&writer&=&new&JsonWriter(new&FileOutputStream(&c:\\json-io.json&))){
&&&&&&&&&&writer.write(jsonObj);
}&catch&(IOException&e)&{
JSON转Java对象
System.out.println(&Read&JSON&from&file,&convert&JSON&string&back&to&object&);
try&(JsonReader&reader&=&new&JsonReader(new&FileInputStream(new&File(&c:\\json-io.json&))))&{
&&&&&&&&&&jsonObj&=&(Json)&reader.readObject();
}&catch&(FileNotFoundException&e)&{
}&catch&(IOException&e)&{
它的文档上说,Json-io比JDK的ObjectInputStream&和ObjectOutputStream的序列化操作要快,我们将会在后面的文章中说明。
(6)使用Genson类库
是一个可扩展的,可伸缩的,易于使用的开源库。除此之外,Genson完整支持了泛型,支持JSON在JAX-RS的实现,支持JAXB的注释(annotation)和类型(types),并且允许序列化和反序列化拥有复杂关键字的map。
下载地址:&,它没有任何依赖。
例子:Java对象转JSON
Json&jsonObj&=&new&Json();
Genson&genson&=&new&Genson();
System.out.println(&Convert&Java&object&to&JSON&format&and&save&to&file&);
try&(FileWriter&writer&=&new&FileWriter(&c:\\genson.json&))&{
&&&&&&&&&&writer.write(genson.serialize(jsonObj));
}&catch&(IOException&|&TransformationException&e)&{
JSON转Java对象
System.out.println(&Read&JSON&from&file,&convert&JSON&string&back&to&object&);
try&(BufferedReader&reader&=&new&BufferedReader(new&FileReader(&c:\\genson.json&)))&{
&&&&&&&&&&jsonObj&=&genson.deserialize(reader,&Json.class);
}&catch&(FileNotFoundException&e)&{
}&catch&(IOException&|&TransformationException&e)&{
(7)使用JSONiJ类库
最后一个讨论的是。JSONiJ是JSON的解析器,一个JPath和Marshaller的实现,能实现Java对象和JSON的相互转换。下载地址:
它不需要任何依赖。
例子:Java对象转JSON
Json&jsonObj&=&new&Json();
System.out.println(&Convert&Java&object&to&JSON&format&and&save&to&file&);
try&(FileWriter&writer&=&new&FileWriter(&c:\\jsonij.json&))&{
&&&&&&&&&&writer.write(JSONMarshaler.marshalObject(jsonObj).toJSON());
}&catch&(IOException&|&JSONMarshalerException&e)&{
JSON转Java&对象
System.out.println(&Read&JSON&from&file,&convert&JSON&string&back&to&object&);
try&(BufferedReader&reader&=&new&BufferedReader(new&FileReader(&c:\\jsonij.json&)))&{
&&&&&&&&&&JSON&json&=&JSON.parse(reader);
&&&&&&&&&&//&Now&we&need&to&parse&the&JSONObject&object&and&put&values&back&
&&&&&&&&&&//&to&our&Json&object
&&&&&&&&&&for&(Field&field&:&jsonObj.getClass().getDeclaredFields())&{
&&&&&&&&&&&&&&&&&&&&try&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&field.setAccessible(true);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&field.set(field.getName(),&json.get(field.getName()));
&&&&&&&&&&&&&&&&&&&&}&catch&(IllegalArgumentException&|&IllegalAccessException&e)&{
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&}
}&catch&(FileNotFoundException&e)&{
}&catch&(IOException&|&ParserException&e)&{
看起来JSONiJ需要的代码多些,性能怎么样,我们看下面。
&(二)基准测试
现在我们要来看看性能了,测试硬件配置:Intel&Core&i5&laptop&with&2.50GHz&单通道DDR3&RAM&4G,软件配置:Windows&7&Ultimate&64-bit&SP1
基准测试运行一样的虚拟机(JVM),在测试之前,每一个类库都有一个热身,去限制内存使用的造成的影响,用一个显式调用垃圾收集器。下面的图表代表的是序列化和反序列化JSON数据以毫秒级使用50次迭代和10次热身(warm-up)迭代的平均的时间。
(译者注:红色为序列化(Java对象转JSON),蓝色为反序列化(JSON转Java对象))
上面的图表显示,Flexjson序列化小数据时是最快的,而JSON-lib是最慢的。反序列化的时候,Gson最快,JSON-lib还是最慢的。
&下面的图表代表的是我们的数据在287kb时,序列化和反序列化所花费的平均时间。
这张图显示,我们对少量的数据操作时,最快的是Gson&,之后的是&Genson和Flexjson。
&当变成大数据时,结果变得很不一样。在下面的图表中,使用的是108Mb的数据,在序列化的时候,Jackson变成了最快的,Flexjson变成第二快。在反序列化的时候,JSON-lib变成了最快的,之前在处理小数据时,它是最慢的,第二快的是Jackson。
&下面的图表,显示的是处理更大一点的数据时,我们应该使用Jackson和JSON-lib。
另外一个重要的测试是关于.jar包的大小。这对于移动端的开发很重要,我们从下图中看到,json-io最小,之后依次是Flexjson和JSONiJ:
(三)结论
在这篇文章中,我们知道了七种方式来实现Java对象和JSON之间的互相转换。以及哪一个类库更快,哪一个更慢,在什么情况下使用等。作为结论,如果你在你的应用中是想使用小一点的数据量,你应该使用Flexjson或者Gson,如果你需要大的数据量你应该考虑Jackson&和JSON-lib。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:70762次
积分:1773
积分:1773
排名:第17961名
原创:83篇
转载:51篇
评论:20条
文章:21篇
阅读:14077
(1)(1)(8)(23)(45)(13)(21)(12)(1)JSON技术的调研报告一 、各个JSON技术的简介和优劣1.json-libjson-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。json-lib在功能和性能上面都不能满足现在互联网化的需求。2.开源的Jackson相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式3.Google的GsonGson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。4.阿里巴巴的FastJsonFastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。无依赖,不需要例外额外的jar,能够直接跑在JDK上。FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。综上4种Json技术的比较,在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用,如果只是功能要求,没有性能要求,可以使用google的Gson,如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean二、Google的Gson包的使用简介。Gson类:解析json的最基础的工具类JsonParser类:解析器来解析JSON到JsonElements的解析树JsonElement类:一个类代表的JSON元素JsonObject类:JSON对象类型JsonArray类:JsonObject数组TypeToken类:用于创建type,比如泛型List&?&(1)maven依赖com.google.code.gsongson2.2.4(2)基础转换类public class Book{private Sprivate Spublic Book() {super();}public String getId() {}public void setId(String id) {this.id =}public String getName() {}public void setName(String name) {this.name =}}public class Student{private Sprivate Sprivate Sprivate Spublic Student() {super();}public String getName() {}public void setName(String name) {this.name =}public int getAge() {}public void setAge(int age) {this.age =}public String getSex() {}public void setSex(String sex) {this.sex =}public Set getBooks() {}public void setBooks(Set books) {this.books =}public String getDescribe() {}public void setDescribe(String describe) {this.describe =}}(3)bean转换jsonGson gson = new Gson();String json = gson.toJson(obj);obj是对象(4)json转换beanGson gson = new Gson();String json = "{\"id\":\"2\",\"name\":\"Json技术\"}";Book book = gson.fromJson(json, Book.class);(5)json转换复杂的bean,比如List,Set将json转换成复杂类型的bean,需要使用TypeTokenGson gson = new Gson();String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";//将json转换成ListList list = gson.fromJson(json,new TypeToken&LIST&() {}.getType());//将json转换成SetSet set = gson.fromJson(json,new TypeToken&SET&() {}.getType());(6)通过json对象直接操作json以及一些json的工具a)格式化JsonString json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";Gson gson = new GsonBuilder().setPrettyPrinting().create();JsonParser jp = new JsonParser();JsonElement je = jp.parse(json);json = gson.toJson(je);b)判断字符串是否是json,通过捕捉的异常来判断是否是jsonString json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";boolean jsonFtry {new JsonParser().parse(str).getAsJsonObject();jsonFlag =} catch (Exception e) {jsonFlag =}c)从json串中获取属性String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";String propertyName = 'id';String propertyValue = "";try {JsonParser jsonParser = new JsonParser();JsonElement element = jsonParser.parse(json);JsonObject jsonObj = element.getAsJsonObject();propertyValue = jsonObj.get(propertyName).toString();} catch (Exception e) {propertyValue =}d)除去json中的某个属性String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";String propertyName = 'id';JsonParser jsonParser = new JsonParser();JsonElement element = jsonParser.parse(json);JsonObject jsonObj = element.getAsJsonObject();jsonObj.remove(propertyName);json = jsonObj.toString();e)向json中添加属性String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";String propertyName = 'desc';Object propertyValue = "json各种技术的调研";JsonParser jsonParser = new JsonParser();JsonElement element = jsonParser.parse(json);JsonObject jsonObj = element.getAsJsonObject();jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));json = jsonObj.toString();f)修改json中的属性String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";String propertyName = 'name';Object propertyValue = "json各种技术的调研";JsonParser jsonParser = new JsonParser();JsonElement element = jsonParser.parse(json);JsonObject jsonObj = element.getAsJsonObject();jsonObj.remove(propertyName);jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));json = jsonObj.toString();g)判断json中是否有属性String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";String propertyName = 'name';boolean isContains =JsonParser jsonParser = new JsonParser();JsonElement element = jsonParser.parse(json);JsonObject jsonObj = element.getAsJsonObject();isContains = jsonObj.has(propertyName);h)json中日期格式的处理GsonBuilder builder = new GsonBuilder();builder.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS");Gson gson = builder.create();然后使用gson对象进行json的处理,如果出现日期Date类的对象,就会按照设置的格式进行处理i)json中对于Html的转义Gson gson = new Gson();这种对象默认对Html进行转义,如果不想转义使用下面的方法GsonBuilder builder = new GsonBuilder();builder.disableHtmlEscaping();Gson gson = builder.create();三、阿里巴巴的FastJson包的使用简介。(1)maven依赖com.alibabafastjson1.1.22(2)基础转换类同上(3)bean转换json将对象转换成格式化的jsonJSON.toJSONString(obj,true);将对象转换成非格式化的jsonJSON.toJSONString(obj,false);obj设计对象对于复杂类型的转换,对于重复的引用在转成json串后在json串中出现引用的字符,比如 $ref":"$[0].books[1]Student stu = new Student();Set books= new HashSet();Book book = new Book();books.add(book);stu.setBooks(books);List list = new ArrayList();for(int i=0;i&5;i++)list.add(stu);String json = JSON.toJSONString(list,true);(4)json转换beanString json = "{\"id\":\"2\",\"name\":\"Json技术\"}";Book book = JSON.parseObject(json, Book.class);(5)json转换复杂的bean,比如List,MapString json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";//将json转换成ListList list = JSON.parseObject(json,new TypeReference&ARRAYLIST&(){});//将json转换成SetSet set = JSON.parseObject(json,new TypeReference&HASHSET&(){});(6)通过json对象直接操作jsona)从json串中获取属性String propertyName = 'id';String propertyValue = "";String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";JSONObject obj = JSON.parseObject(json);propertyValue = obj.get(propertyName));b)除去json中的某个属性String propertyName = 'id';String propertyValue = "";String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";JSONObject obj = JSON.parseObject(json);Set set = obj.keySet();propertyValue = set.remove(propertyName);json = obj.toString();c)向json中添加属性String propertyName = 'desc';Object propertyValue = "json的玩意儿";String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";JSONObject obj = JSON.parseObject(json);obj.put(propertyName, JSON.toJSONString(propertyValue));json = obj.toString();d)修改json中的属性String propertyName = 'name';Object propertyValue = "json的玩意儿";String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";JSONObject obj = JSON.parseObject(json);Set set = obj.keySet();if(set.contains(propertyName))obj.put(propertyName, JSON.toJSONString(propertyValue));json = obj.toString();e)判断json中是否有属性String propertyName = 'name';boolean isContain =String json = "{\"id\":\"1\",\"name\":\"Json技术\"}";JSONObject obj = JSON.parseObject(json);Set set = obj.keySet();isContain = set.contains(propertyName);f)json中日期格式的处理Object obj = new Date();String json = JSON.toJSONStringWithDateFormat(obj, "yyyy-MM-dd HH:mm:ss.SSS");使用JSON.toJSONStringWithDateFormat,该方法可以使用设置的日期格式对日期进行转换三、json-lib包的使用简介。(1)maven依赖net.sf.json-libjson-libjdk152.2.2commons-beanutilscommons-beanutils1.8.3commons-collectionscommons-collections3.2commons-langcommons-lang2.6commons-logging commons-logging 1.1.1 net.sf.ezmorphezmorph1.0.6(2)基础转换类同上(3)bean转换jsona)将类转换成Json,obj是普通的对象,不是List,Map的对象String json = JSONObject.fromObject(obj).toString();b)将List,Map转换成JsonString json = JSONArray.fromObject(list).toString();String json = JSONArray.fromObject(map).toString();(4)json转换beanString json = "{\"id\":\"1\",\"name\":\"Json技术\"}";JSONObject jsonObj = JSONObject.fromObject(json);Book book = (Book)JSONObject.toBean(jsonObj,Book.class);(5)json转换List,对于复杂类型的转换会出现问题String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"Java技术\"}]";JSONArray jsonArray = JSONArray.fromObject(json);JSONObject jsonOTint size = jsonArray.size();List list = new ArrayList(size);for (int i = 0; i & i++) {jsonObject = jsonArray.getJSONObject(i);bean = (T) JSONObject.toBean(jsonObject, beanClass);list.add(bean);}(6)json转换MapString jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";JSONObject jsonObject = JSONObject.fromObject(jsonString);Iterator keyIter = jsonObject.keys();SOMap valueMap = new HashMap();while (keyIter.hasNext()) {key = (String) keyIter.next();value = jsonObject.get(key).toString();valueMap.put(key, value);}(7)json对于日期的操作比较复杂,需要使用JsonConfig,比Gson和FastJson要麻烦多了创建转换的接口实现类,转换成指定格式的日期class DateJsonValueProcessor implements JsonValueProcessor{public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS"; private DateFormat dateF public DateJsonValueProcessor(String datePattern) { try { dateFormat = new SimpleDateFormat(datePattern); } catch (Exception ex) { dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN); } } public Object processArrayValue(Object value, JsonConfig jsonConfig) { return process(value); } public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { return process(value); } private Object process(Object value) { return dateFormat.format[];Map&STRING,DATE& birthDays = new HashMap&STRING,DATE&();birthDays.put("WolfKing",new Date());JSONObject jsonObject = JSONObject.fromObject(birthDays, jsonConfig);String json = jsonObject.toString();System.out.println(json);}}(8)JsonObject 对于json的操作和处理a)从json串中获取属性String jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";Object key = "name";Object value =JSONObject jsonObject = JSONObject.fromObject(jsonString);value = jsonObject.get(key);jsonString = jsonObject.toString();b)除去json中的某个属性String jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";Object key = "name";Object value =JSONObject jsonObject = JSONObject.fromObject(jsonString);value = jsonObject.remove(key);jsonString = jsonObject.toString();c)向json中添加和修改属性,有则修改,无则添加String jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";Object key = "desc";Object value = "json的好东西";JSONObject jsonObject = JSONObject.fromObject(jsonString);jsonObject.put(key,value);jsonString = jsonObject.toString();d)判断json中是否有属性String jsonString = "{\"id\":\"1\",\"name\":\"Json技术\"}";boolean containFlag =Object key = "desc";JSONObject jsonObject = JSONObject.fromObject(jsonString);containFlag = jsonObject.containsKey(key);
阅读(...) 评论()

我要回帖

更多关于 java开源日志分析工具 的文章

 

随机推荐