3.总结

杰克逊关于Json的操作首要如上所示,其艺术应用起来很有益于,而且也很灵敏,即提供了三回性完成的操作,也提供了能够按需读取音信的操作。并且杰克逊的作用很齐全,能够对体系化和反系列化进行各类细节的决定,例如评释效率和对此Hibernate的推迟注入成效以及安装时间格式成效等,因为那几个职能近日不太急需,所以稳扎稳打留待今后。同时,杰克逊还扶助对XML的1多级体系化和反体系化的操作,其思路与解析Json的大约同样。

对此Jackson方今的后天不足,网上有人测试所比Json-lib更占内部存储器一些。而选用空间换时间,一般是值得的。

                                                                             ———-欢迎转发,但保留版权,请在强烈处标明出处:http://www.cnblogs.com/naaoveGIS/

2.1.4.2结论

此措施1致能够拿走地点方法的值。不过注意此方法中的这几个函数:createJsonGenerator(),它供给八个参数,三个是OutputStream类型参数,三个是JsonEncoding类型参数。通过那八个参数,大家得以掌握到,此方法不但能够将Json直接写入网络流,还足以将Json写入文件流也许内部存储器流。所以用途更广。

2.1.2.3结论

由此输出,可知转变得到的Json串是契合格式的。可是,时间的表示有点不符合标准。下边将介绍对时间格式的退换。

贰.一.3.1自定义时间格式的贯彻

事例还动用地点所介绍的student类。

student st=new student();

java.text.DateFormat myFormat = new
java.text.SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);

objectMapper.getSerializationConfig().setDateFormat(myFormat);

String teststringstu=objectMapper.writeValueAsString(st);

System.out.println(teststringstu);

调节台上输出的记过是:

{“list”:[“hao”,”haouhao”,”keyi”],”time”:”2013-08-02
03:48:20″,”name”:”hhh”,”age”:10}

二.1.三对时间格式的定义

杰克逊有友好的私下认可时间格式,即timestamps格局,其意义即如上结果所显示的(例如:13754292283八二)。若是想设置此格式是无用,通过objectMapper.configure(SerializationConfig.Feature.WEscortITE_DATES_AS_TIMESTAMPS,
false)便可设置,那样将使时间更改使用所谓的行使 [ISO-8601 ]-compliant
notation, 输出接近如下格式的时日: “一玖69-0壹-0一T00:00:00.000+0000″。

本来,也能够自定义输出的流年格式。

2.1.1.3结论

杰克逊对一般项指标体系化是能轻易完成的。

2.1序列化

二.壹.1.2兑现连串化

String teststringlist=objectMapper.writeValueAsString(list);

System.out.println(teststringlist);

在支配台出口的结果是:

[1,2,3]

2使用

杰克逊提供了过多类和措施,而在体系化和反类别化中央银行使的最多的类则是ObjectMapper那么些类,此类相比较接近于Json-lib中JsonObject和ArrayObject。此类中提供了readTree(),readValue(),writeValueAsString()等艺术用于转移。具体有关此类的证实文书档案地址是:http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html

为了制止双重描述,上边中所涉及到的objectMapper均是来至于ObjectMapper
objectMapper = new
ObjectMapper()。上边将遵从种类化和反系列化五个地点来归纳介绍用法。

二.1.肆.一兑现系列化

所用例子依然是事先的student类。

student st=new student();

JsonGenerator jsonGenerator =
objectMapper.getJsonFactory().createJsonGenerator(System.out,
JsonEncoding.UTF8);

jsonGenerator.writeObject(st); 

System.out.println();

调节台上的输出结果是:

{“list”:[“hao”,”haouhao”,”keyi”],”time”:1375429228382,”name”:”hhh”,”age”:10}

二.一.一.一测试例子

List list=new ArrayList();

list.add(1);

list.add(2);

list.add(3);

2.一.4 另一种种类化方法

贰.一.2.壹测试例子

public class student {

private int age=10;

private String name=”hhh”;  

    public String[] list={“hao”,”haouhao”,”keyi”};

    public Date time=new Date();

         public int getAge() {

                   return age;

         }

         public void setAge(int age) {

                   this.age = age;

         }

         public String getName() {

                   return name;

         }

         public void setName(String name) {

                   this.name = name;

         }

}

为使例子更有着通用性,此类中蕴藏了值类型int,引用类型String,String[],还含有了日期类型Date。

2.2.2渐次反连串化

此格局更加灵敏,能够只将用户感兴趣的Json串新闻值提抽出来。主要利用ObjectMapper提供的readTree和杰克逊提供的JsonNode类来兑现。

小说版权由作者李晓晖和天涯论坛共有,若转发请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

二.一.贰.2达成体系化

student st=new student();

String teststringstu=objectMapper.writeValueAsString(st);

System.out.println(teststringstu);

在决定台出口的结果是:

{“list”:[“hao”,”haouhao”,”keyi”],”time”:1375429228382,”name”:”hhh”,”age”:10}

二.一.一 对java自带类进行体系化

2.2.2.3结论

此措施类似于XML解析中的DOM格局分析,其收益是布局致密,便于提取想要的音讯。当然,其缺点也和此办法1致:耗费时间费空间。

二.一.二 对自定义类的种类化

二.二.二.一测试例子

String
test=”{“results”:[{“objectID”:357,”geoPoints”:[{“x”:504604.59802246094,”y”:305569.9150390625}]},{“objectID”:358,”geoPoints”:[{“x”:504602.2680053711,”y”:305554.43603515625}]}]}”;

此Json串比较复杂,包括了嵌套数组的款式,具备通用性。

二.2 反连串化

二.二.贰.贰兑现行反革命系列化

JsonNode node= objectMapper.readTree(test);     
//将Json串以树状结构读入内部存款和储蓄器

JsonNode contents=node.get(“results”);//得到results那一个节点下的音讯

for(int i=0;i<contents.size();i++)
 //遍历results下的音信,size()函数能够得节点所包括的的新闻的个数,类似于数组的尺寸

{

System.out.println(contents.get(i).get(“objectID”).getIntValue());
//读取节点下的某部子节点的值

JsonNode geoNumber=contents.get(i).get(“geoPoints”);

for(int j=0;j<geoNumber.size();j++)     //循环遍历子节点下的消息

{

XML,System.out.println(geoNumber.get(j).get(“x”).getDoubleValue()+” 
“+geoNumber.get(j).get(“y”).getDoubleValue());

}

}

在支配台下输出的结果是:

357

504604.59802246094  305569.9150390625

358

504602.2680053711  305554.43603515625

2.1.3.2结论

可见时间输出格式化为了我们想要的了。在杰克逊中定义时间输出格式的办法比在Json-lib中对时间格式的定义简便大多。

二.2.一.二 将Json串反体系化到系统自带的类中

当Json串是

String json =
“{“error”:0,”data”:{“name”:”ABC”,”age”:20,”phone”:{“home”:”abc”,”mobile”:”def”},”friends”:[{“name”:”DEF”,”phone”:{“home”:”hij”,”mobile”:”klm”}},{“name”:”GHI”,”phone”:{“home”:”nop”,”mobile”:”qrs”}}]},”other”:{“nickname”:[]}}”。

用系统自带的Map定义3个变量:Map<String, Map<String,
Object>>  maps。然后利用maps = objectMapper.readValue(json,
Map.class)便可将Json反系列化到变量maps中。

透过System.out.println(maps.get(“error”));System.out.println((Object)(maps.get(“data”).get(“phone”))),可在调节马赛获得下边包车型地铁结果:

0

{home=abc, mobile=def}

二.贰.壹.一将Json串解析到自定义类中

当Json串为:

String
test1=”{“objectID”:357,”geoPoints”:[{“x”:504604.59802246094,”y”:305569.9150390625}]}”时。

率先自定义贰个类:

public class testJsonClass

 {

       public int objectID;

       public List geoPoints=new ArrayList();

}

接下来利用上面段代码将Json反类别化到此类中:

testJsonClass testClass= objectMapper.readValue(test1,
testJsonClass.class);

应用System.out.println(testClass.objectID);System.out.println(testClass.geoPoints)能够在调节台上来看输出的值为:

357

[{x=504604.59802246094, y=305569.9150390625}]

1简介

杰克逊具有相比较高的类别化和反序列化作用,据测试,无论是哪一类情势的转变,Jackson> Gson >
Json-lib,而且杰克逊的拍卖技能依旧超过Json-lib近10倍左右,且不易也非常高。比较之下,Json-lib就像早已告一段落更新,最新的本子也是依据JDK1伍,而杰克逊的社区则较为活跃。

上面,结合实例来对Jackson的用法进行简易介绍。

二.二.一 1回性反类别化

此措施中最主要使用ObjectMapper提供的<testJsonClass> readValue(String
content, Class<testJsonClass>
valueType)方法。此方法须要输入Json串以及相应的需求填写的类的Class,重回填充后的类。

相关文章

网站地图xml地图