2.1.4.2结论

此格局一致能够赢得地方方法的值。可是注意此方法中的那些函数:createJsonGenerator(),它需求五个参数,3个是OutputStream类型参数,八个是JsonEncoding类型参数。通过这五个参数,大家得以掌握到,此方法不但能够将Json直接写入互联网流,还足以将Json写入文件流大概内部存款和储蓄器流。所以用途更广。

2.1.3对时间格式的定义

杰克逊有温馨的私下认可时间格式,即timestamps情势,其成效即如上结果所突显的(例如:1375429228382)。要是想设置此格式是对事情没有什么帮助,通过objectMapper.configure(SerializationConfig.Feature.W奥迪Q7ITE_DATES_AS_TIMESTAMPS,
false)便可设置,这样将使时间变化使用所谓的应用 [ISO-8601 ]-compliant
notation, 输出接近如下格式的岁月: “一九六七-01-01T00:00:00.000+0000″。

理所当然,也得以自定义输出的时刻格式。

2.1.4 另一种连串化方法

2.2.1.1将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}]

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()。下边将奉公守法种类化和反类别化七个方面来不难介绍用法。

2.1.3.2结论

可知时间输出格式化为了小编们想要的了。在杰克逊中定义时间输出格式的点子比在Json-lib中对时间格式的概念简便很多。

2.1.2 对自定义类的体系化

2.1.2.1测试例子

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.1 二遍性反体系化

此措施中首要性行使ObjectMapper提供的<testJsonClass> readValue(String
content, Class<testJsonClass>
valueType)方法。此方式需求输入Json串以及相应的必要填写的类的Class,再次回到填充后的类。

2.1.1.1测试例子

List list=new ArrayList();

list.add(1);

list.add(2);

list.add(3);

2.2.2.1测试例子

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

此Json串比较复杂,包蕴了嵌套数组的款型,具有通用性。

2.2 反类别化

2.2.2渐次反系列化

此办法更灵活,能够只将用户感兴趣的Json串音信值提取出来。重要运用ObjectMapper提供的readTree和杰克逊提供的JsonNode类来落到实处。

3.总结

Jackson关于Json的操作首要如上所示,其格局应用起来很有利,而且也很灵巧,即提供了1回性完毕的操作,也提供了能够按需读撤销息的操作。并且杰克逊的机能很齐全,能够对种类化和反类别化举办多样细节的支配,例如评释成效和对此Hibernate的延迟注入成效以及安装时间格式功效等,因为那些功效近日不太急需,所以仔细研讨留待现在。同时,Jackson还支持对XML的一文山会海连串化和反种类化的操作,其思路与解析Json的差不多相同。

对于杰克逊近来的欠缺,网上有人测试所比Json-lib更占内部存款和储蓄器一些。而接纳空间换时间,一般是值得的。

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

2.1.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}

2.1.1 对java自带类举办系列化

2.2.1.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定义二个变量: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}

文章版权由笔者李晓晖和和讯共有,若转发请于鲜明处标明出处:http://www.cnblogs.com/naaoveGIS/

2.1.2.3结论

透过输出,可知转换获得的Json串是契合格式的。可是,时间的代表有点不符合标准。上面将介绍对时间格式的改动。

2.1.2.2贯彻系列化

student st=new student();

String teststringstu=objectMapper.writeValueAsString(st);

System.out.println(teststringstu);

在支配台出口的结果是:

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

2.1.1.3结论

杰克逊对一般品种的体系化是能大致达成的。

2.1.1.2兑现体系化

String teststringlist=objectMapper.writeValueAsString(list);

System.out.println(teststringlist);

在支配台出口的结果是:

[1,2,3]

2.2.2.3结论

此措施类似于XML解析中的DOM情势分析,其利益是布局致密,便于提取想要的新闻。当然,其缺点也和此办法一致:耗费时间费空间。

2.1.4.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}

1简介

Jackson具有相比较高的连串化和反连串化效能,据测试,无论是哪一种格局的变换,Jackson> Gson >
Json-lib,而且杰克逊的拍卖能力依然高出Json-lib近10倍左右,且不易也11分高。相比较之下,Json-lib就好像早已终止更新,最新的本子也是基于JDK15,而杰克逊的社区则比较活跃。

上面,结合实例来对杰克逊的用法举行简易介绍。

2.2.2.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++)     //循环遍历子节点下的音讯

{

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序列化

相关文章

网站地图xml地图