Jackson框架轻易转换JSON.doc_第1页
Jackson框架轻易转换JSON.doc_第2页
Jackson框架轻易转换JSON.doc_第3页
Jackson框架轻易转换JSON.doc_第4页
Jackson框架轻易转换JSON.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Jackson框架轻易转换JSONJACKSON系统开发方法是一种典型的面向数据结构的分析和设计方法,以活动为中心,一连串的活动的顺序组合成一个完整的工作进程。本文主要介绍,Java对象和json对象,通用Jackson的互相转换。Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。一、准备工作1、 下载依赖库jar包Jackson的jar all下载地址:/1.7.6/jackson-all-1.7.6.jar然后在工程中导入这个jar包即可开始工作官方示例:/JacksonInFiveMinutes因为下面的程序是用junit测试用例运行的,所以还得添加junit的jar包。版本是junit-4.2.8如果你需要转换xml,那么还需要stax2-api.jar2、 测试类基本代码如下1. packagecom.hoo.test; 2. importjava.io.IOException; 3. importjava.io.StringWriter; 4. importjava.util.ArrayList; 5. importjava.util.HashMap; 6. importjava.util.Iterator; 7. importjava.util.LinkedHashMap; 8. importjava.util.List; 9. importjava.util.Map; 10. importjava.util.Set; 11. importorg.codehaus.jackson.JsonEncoding; 12. importorg.codehaus.jackson.JsonGenerationException; 13. importorg.codehaus.jackson.JsonGenerator; 14. importorg.codehaus.jackson.JsonParseException; 15. importorg.codehaus.jackson.map.JsonMappingException; 16. importorg.codehaus.jackson.map.ObjectMapper; 17. importorg.codehaus.jackson.node.JsonNodeFactory; 18. importorg.codehaus.jackson.xml.XmlMapper; 19. importorg.junit.After; 20. importorg.junit.Before; 21. importorg.junit.Test; 22. importcom.hoo.entity.AccountBean; 23. /* 24. *function:Jackson将java对象转换成JSON字符串,也可以将JSON字符串转换成java对象 25. *jar-lib-version:jackson-all-1.6.2 26. *jettison-1.0.1 27. *authorhoojo 28. *createDate2010-11-23下午04:54:53 29. *fileJacksonTest.java 30. *packagecom.hoo.test 31. *projectSpring3 32. *blog/IBM_hoojo 33. *emailhoojo_126.com 34. *version1.0 35. */36. SuppressWarnings(unchecked) 37. publicclassJacksonTest 38. privateJsonGeneratorjsonGenerator=null; 39. privateObjectMapperobjectMapper=null; 40. privateAccountBeanbean=null; 41. Before42. publicvoidinit() 43. bean=newAccountBean(); 44. bean.setAddress(china-Guangzhou); 45. bean.setEmail(hoojo_126.com); 46. bean.setId(1); 47. bean.setName(hoojo); 48. objectMapper=newObjectMapper(); 49. try 50. jsonGenerator=objectMapper.getJsonFactory().createJsonGenerator(System.out,JsonEncoding.UTF8); 51. catch(IOExceptione) 52. e.printStackTrace(); 53. 54. After55. publicvoiddestory() 56. try 57. if(jsonGenerator!=null) 58. jsonGenerator.flush(); 59. 60. if(!jsonGenerator.isClosed() 61. jsonGenerator.close(); 62. jsonGenerator=null; 63. objectMapper=null; 64. bean=null; 65. System.gc(); 66. catch(IOExceptione) 67. e.printStackTrace(); 68. 69. 3、 所需要的JavaEntity1. packagecom.hoo.entity; 2. publicclassAccountBean 3. privateintid; 4. privateStringname; 5. privateStringemail; 6. privateStringaddress; 7. privateBirthdaybirthday; 8. /getter、setter 9. Override10. publicStringtoString() 11. +#+this.id+#+this.address+#+this.birthday+#+this.email; 12. 13. 14. Birthday 15. packagecom.hoo.entity; 16. publicclassBirthday 17. privateStringbirthday; 18. publicBirthday(Stringbirthday) 19. super(); 20. this.birthday=birthday; 21. 22. /getter、setter 23. publicBirthday() 24. Override25. publicStringtoString() 26. returnthis.birthday; 27. 28. 二、Java对象转换成JSON1、 JavaBean(Entity/Model)转换成JSON1. /* 2. *function:将java对象转换成json字符串 3. *authorhoojo 4. *createDate2010-11-23下午06:01:10 5. */6. Test7. publicvoidwriteEntityJSON() 8. try 9. System.out.println(jsonGenerator); 10. /writeObject可以转换java对象,eg:JavaBean/Map/List/Array等 11. jsonGenerator.writeObject(bean); 12. System.out.println(); 13. System.out.println(ObjectMapper); 14. /writeValue具有和writeObject相同的功能 15. objectMapper.writeValue(System.out,bean); 16. catch(IOExceptione) 17. e.printStackTrace(); 18. 19. 运行后结果如下:1. jsonGenerator 2. address:china-Guangzhou,name:hoojo,id:1,birthday:null,email:hoojo_126.com 3. ObjectMapper 4. address:china-Guangzhou,name:hoojo,id:1,birthday:null,email:hoojo_126.com上面分别利用JsonGenerator的writeObject方法和ObjectMapper的writeValue方法完成对Java对象的转换,二者传递的参数及构造的方式不同;JsonGenerator的创建依赖于ObjectMapper对象。也就是说如果你要使用JsonGenerator来转换JSON,那么你必须创建一个ObjectMapper。但是你用ObjectMapper来转换JSON,则不需要JSONGenerator。objectMapper的writeValue方法可以将一个Java对象转换成JSON。这个方法的参数一,需要提供一个输出流,转换后可以通过这个流来输出转换后的内容。或是提供一个File,将转换后的内容写入到File中。当然,这个参数也可以接收一个JSONGenerator,然后通过JSONGenerator来输出转换后的信息。第二个参数是将要被转换的Java对象。如果用三个参数的方法,那么是一个Config。这个config可以提供一些转换时的规则,过指定的Java对象的某些属性进行过滤或转换等。2、 将Map集合转换成Json字符串1. /* 2. *function:将map转换成json字符串 3. *authorhoojo 4. *createDate2010-11-23下午06:05:26 5. */6. Test7. publicvoidwriteMapJSON() 8. try 9. Mapmap=newHashMap(); 10. map.put(name,bean.getName(); 11. map.put(account,bean); 12. bean=newAccountBean(); 13. bean.setAddress(china-Beijin); 14. bean.setEmail(); 15. map.put(account2,bean); 16. System.out.println(jsonGenerator); 17. jsonGenerator.writeObject(map); 18. System.out.println(); 19. System.out.println(objectMapper); 20. objectMapper.writeValue(System.out,map); 21. catch(IOExceptione) 22. e.printStackTrace(); 23. 24. 转换后结果如下:1. jsonGenerator 2. account2:address:china-Beijin,name:null,id:0,birthday:null,email:,name:hoojo, 3. account:address:china-Guangzhou,name:hoojo,id:1,birthday:null,email:hoojo_126.com 4. objectMapper 5. account2:address:china-Beijin,name:null,id:0,birthday:null,email:,name:hoojo, 6. account:address:china-Guangzhou,name:hoojo,id:1,birthday:null,email:hoojo_126.com3、 将List集合转换成json1. /* 2. *function:将list集合转换成json字符串 3. *authorhoojo 4. *createDate2010-11-23下午06:05:59 5. */6. Test7. publicvoidwriteListJSON() 8. try 9. Listlist=newArrayList(); 10. list.add(bean); 11. bean=newAccountBean(); 12. bean.setId(2); 13. bean.setAddress(address2); 14. bean.setEmail(email2); 15. bean.setName(haha2); 16. list.add(bean); 17. System.out.println(jsonGenerator); 18. /list转换成JSON字符串 19. jsonGenerator.writeObject(list); 20. System.out.println(); 21. System.out.println(ObjectMapper); 22. /用objectMapper直接返回list转换成的JSON字符串 23. System.out.println(1#+objectMapper.writeValueAsString(list); 24. System.out.print(2#); 25. /objectMapperlist转换成JSON字符串 26. objectMapper.writeValue(System.out,list); 27. catch(IOExceptione) 28. e.printStackTrace(); 29. 30. 结果如下:1. jsonGenerator 2. address:china-Guangzhou,name:hoojo,id:1,birthday:null,email:hoojo_126.com, 3. address:address2,name:haha2,id:2,birthday:null,email:email2 4. ObjectMapper 5. 1#address:china-Guangzhou,name:hoojo,id:1,birthday:null,email:hoojo_126.com, 6. address:address2,name:haha2,id:2,birthday:null,email:email2 7. 2#address:china-Guangzhou,name:hoojo,id:1,birthday:null,email:hoojo_126.com, 8. address:address2,name:haha2,id:2,birthday:null,email:email2外面就是多了个中括号;同样Array也可以转换,转换的JSON和上面的结果是一样的,这里就不再转换了。.4、下面来看看jackson提供的一些类型,用这些类型完成json转换;如果你使用这些类型转换JSON的话,那么你即使没有JavaBean(Entity)也可以完成复杂的Java类型的JSON转换。下面用到这些类型构建一个复杂的Java对象,并完成JSON转换。1. Test2. publicvoidwriteOthersJSON() 3. try 4. Stringarr=a,b,c; 5. System.out.println(jsonGenerator); 6. Stringstr=helloworldjackson!; 7. /byte 8. jsonGenerator.writeBinary(str.getBytes(); 9. /boolean 10. jsonGenerator.writeBoolean(true); 11. /null 12. jsonGenerator.writeNull(); 13. /float 14. jsonGenerator.writeNumber(2.2f); 15. /char 16. jsonGenerator.writeRaw(c); 17. /String 18. jsonGenerator.writeRaw(str,5,10); 19. /String 20. jsonGenerator.writeRawValue(str,5,5); 21. /String 22. jsonGenerator.writeString(str); 23. jsonGenerator.writeTree(JsonNodeFactory.instance.POJONode(str); 24. System.out.println(); 25. /Object 26. jsonGenerator.writeStartObject();/ 27. jsonGenerator.writeObjectFieldStart(user);/user: 28. jsonGenerator.writeStringField(name,jackson);/name:jackson 29. jsonGenerator.writeBooleanField(sex,true);/sex:true 30. jsonGenerator.writeNumberField(age,22);/age:22 31. jsonGenerator.writeEndObject();/ 32. jsonGenerator.writeArrayFieldStart(infos);/infos: 33. jsonGenerator.writeNumber(22);/22 34. jsonGenerator.writeString(thisisarray);/thisisarray 35. jsonGenerator.writeEndArray();/ 36. jsonGenerator.writeEndObject();/ 37. AccountBeanbean=newAccountBean(); 38. bean.setAddress(address); 39. bean.setEmail(email); 40. bean.setId(1); 41. bean.setName(haha); 42. /complexObject 43. jsonGenerator.writeStartObject();/ 44. jsonGenerator.writeObjectField(user,bean);/user:bean 45. jsonGenerator.writeObjectField(infos,arr);/infos:array 46. jsonGenerator.writeEndObject();/ 47. catch(Exceptione) 48. e.printStackTrace(); 49. 50. 运行后,结果如下:1. jsonGenerator 2. aGVsbG8gd29ybGQgamFja3NvbiE=truenull2.2cworldjacworlhelloworldjackson!helloworldjackson!3. user:name:jackson,sex:true,age:22,infos:22,thisisarray 4. user:address:address,name:haha,id:1,birthday:null,email:email,infos:a,b,c怎么样?构造的json字符串和输出的结果是一致的吧。关键看懂用JSONGenerator提供的方法,完成一个Object的构建。三、JSON转换成Java对象1、 将json字符串转换成JavaBean对象1. Test2. publicvoidreadJson2Entity() 3. Stringjson=address:address,name:haha,id:1,email:email; 4. try 5. AccountBeanacc=objectMapper.readValue(json,AccountBean.class); 6. System.out.println(acc.getName(); 7. System.out.println(acc); 8. catch(JsonParseExceptione) 9. e.printStackTrace(); 10. catch(JsonMappingExceptione) 11. e.printStackTrace(); 12. catch(IOExceptione) 13. e.printStackTrace(); 14. 15. 很简单,用到了ObjectMapper这个对象的readValue这个方法,这个方法需要提供2个参数。第一个参数就是解析的JSON字符串,第二个参数是即将将这个JSON解析吃什么Java对象,Java对象的类型。当然,还有其他相同签名方法,如果你有兴趣可以一一尝试使用方法,当然使用的方法和当前使用的方法大同小异。运行后,结果如下:1. haha 2. haha#1#address#null#email2、 将json字符串转换成List集合1. /* 2. *function:json字符串转换成list 3. *authorhoojo 4. *createDate2010-11-23下午06:12:01 5. */6. Test7. publicvoidreadJson2List() 8. Stringjson=address:address2,name:haha2,id:2,email:email2,+ 9. address:address,name:haha,id:1,email:email; 10. try 11. ListLinkedHashMaplist=objectMapper.readValue(json,List.class); 12. System.out.println(list.size(); 13. for(inti=0;ilist.size();i+) 14. Mapmap=list.get(i); 15. Setset=map.keySet(); 16. for(Iteratorit=set.iterator();it.hasNext();) 17. Stringkey=it.next(); 18. System.out.println(key+:+map.get(key); 19. 20. catch(JsonParseExceptione) 21. e.printStackTrace(); 22. catch(JsonMappingExceptione) 23. e.printStackTrace(); 24. catch(IOExceptione) 25. e.printStackTrace(); 26. 27. 尝试过将上面的JSON转换成List,然后List中存放AccountBean,但结果失败了。但是支持Map集合。因为你转成List.class,但是不知道List存放何种类型。只好默然Map类型。因为所有的对象都可以转换成Map结合,运行后结果如下:1. 22. address:address2 3. name:haha2 4. id:25. email:email2 6. address:address 7. name:haha 8. id:19. email:email3、 Json字符串转换成Array数组,由于上面的泛型转换不能识别到集合中的对象类型。所有这里用对象数组,可以解决这个问题。只不过它不再是集合,而是一个数组。当然这个不重要,你可以用Arrays.asList将其转换成List即可。1. /* 2. *function:json字符串转换成Array 3. *authorhoojo 4. *createDate2010-11-23下午06:14:01 5. */6. Test7. publicvoidreadJson2Array() 8. Stringjson=address:address2,name:haha2,id:2,email:email2,+ 9. address:address,name:haha,id:1,email:email; 10. try 11. AccountBeanarr=objectMapper.readValue(json,AccountBean.class); 12. System.out.println(arr.length); 13. for(inti=0;iarr.length;i+) 14. System.out.println(arri); 15. 16. catch(JsonParseExceptione) 17. e.printStackTrace(); 18. catch(JsonMappingExceptione) 19. e.printStackTrace(); 20. catch(IOExceptione) 21. e.printStackTrace(); 22. 23. 运行后的结果:1. 22. haha2#2#address2#null#email2 3. haha#1#address#null#email4、 Json字符串转换成Map集合1. /* 2. *function:json字符串转换Map集合 3. *authorhoojo 4. *createDateNov27,20103:00:06PM 5. */6. Test7. publicvoidreadJson2Map() 8. Stringjson=success:true,A:address:address2,name:haha2,id:2,email:email2,+ 9. B:address:address,name:haha,id:1,email:email; 10. try 11. MapString,Mapmaps=objectMapper.readValue(json,Map.class); 12. System.out.println(maps.size(); 13. Setkey=maps.keySet(); 14. Iteratoriter=key.iterator(); 15. while(iter.hasNext() 16. Stringfield=iter.next(); 17. System.out.println(field+:+maps.get(field); 18. 19. catch(JsonParseExceptione) 20. e.printStackTrace(); 21. catch(JsonMappingExceptione) 22. e.printStackTrace(); 23. catch(IOExceptione) 24. e.printStackTrace(); 25. 26. 运行后结果如下:1. 32. success:true3. A:address=address2,name=ha

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论