分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

Jackson 框架JSON、XML、List、Map直接相互转换

发布时间:2023-09-06 01:51责任编辑:林大明关键词:暂无标签

  • xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
  • <modelVersion>4.0.0</modelVersion>
  • <groupId>com.waegg</groupId>
  • <artifactId>jacksonTest</artifactId>
  • <version>0.0.1-SNAPSHOT</version>
  • <dependencies>
  • <dependency>
  • <groupId>junit</groupId>
  • <artifactId>junit</artifactId>
  • <version>4.12</version>
  • </dependency>
  • <dependency>
  • <groupId>org.codehaus.jackson</groupId>
  • <artifactId>jackson-mapper-asl</artifactId>
  • <version>1.9.13</version>
  • </dependency>
  • <dependency>
  • <groupId>com.fasterxml.jackson.dataformat</groupId>
  • <artifactId>jackson-dataformat-xml</artifactId>
  • <version>2.7.1</version>
  • </dependency>
  • </dependencies>
  • <packaging>war</packaging>
  • </project>
  • 二、Bean代码

    AccountBean :

    Java代码
    1. packagecom.bugyun.pojo;
    2. publicclassAccountBean{
    3. privateintid;
    4. privateStringname;
    5. privateStringemail;
    6. privateStringaddress;
    7. privateBirthdaybirthday;
    8. //getter、setter
    9. @Override
    10. publicStringtoString(){
    11. returnthis.name+"#"+this.id+"#"+this.address+"#"+this.birthday+"#"+this.email;
    12. }
    13. publicintgetId(){
    14. returnid;
    15. }
    16. publicvoidsetId(intid){
    17. this.id=id;
    18. }
    19. publicStringgetName(){
    20. returnname;
    21. }
    22. publicvoidsetName(Stringname){
    23. this.name=name;
    24. }
    25. publicStringgetEmail(){
    26. returnemail;
    27. }
    28. publicvoidsetEmail(Stringemail){
    29. this.email=email;
    30. }
    31. publicStringgetAddress(){
    32. returnaddress;
    33. }
    34. publicvoidsetAddress(Stringaddress){
    35. this.address=address;
    36. }
    37. publicBirthdaygetBirthday(){
    38. returnbirthday;
    39. }
    40. publicvoidsetBirthday(Birthdaybirthday){
    41. this.birthday=birthday;
    42. }
    43. }
    Birthday:
    Java代码
    1. packagecom.bugyun.pojo;
    2. publicclassBirthday{
    3. privateStringbirthday;
    4. publicBirthday(Stringbirthday){
    5. super();
    6. this.birthday=birthday;
    7. }
    8. //getter、setter
    9. publicBirthday(){
    10. }
    11. publicStringgetBirthday(){
    12. returnbirthday;
    13. }
    14. publicvoidsetBirthday(Stringbirthday){
    15. this.birthday=birthday;
    16. }
    17. @Override
    18. publicStringtoString(){
    19. returnthis.birthday;
    20. }
    21. }

    三、测试代码

    Java代码
    1. packagecom.bugyun.test;
    2. importjava.io.IOException;
    3. importjava.io.StringWriter;
    4. importjava.util.ArrayList;
    5. importjava.util.HashMap;
    6. importjava.util.Iterator;
    7. importjava.util.List;
    8. importjava.util.Map;
    9. importjava.util.Set;
    10. importorg.codehaus.jackson.JsonEncoding;
    11. importorg.codehaus.jackson.JsonGenerationException;
    12. importorg.codehaus.jackson.JsonGenerator;
    13. importorg.codehaus.jackson.JsonParseException;
    14. importorg.codehaus.jackson.map.JsonMappingException;
    15. importorg.codehaus.jackson.map.ObjectMapper;
    16. importorg.junit.After;
    17. importorg.junit.Before;
    18. importorg.junit.Test;
    19. importcom.bugyun.pojo.AccountBean;
    20. importcom.fasterxml.jackson.dataformat.xml.XmlMapper;
    21. /**
    22. *项目名称:jacksonTest
    23. *类名称:JacksonTest.java
    24. *类描述:
    25. *创建人:beyond
    26. *创建时间:2016年2月24日上午11:24:33
    27. *修改人:
    28. *修改时间:
    29. *修改备注:
    30. *@version
    31. */
    32. publicclassJacksonTest{
    33. privateJsonGeneratorjsonGenerator=null;
    34. privateObjectMapperobjectMapper=null;
    35. privateAccountBeanbean=null;
    36. @Before
    37. publicvoidinit(){
    38. bean=newAccountBean();
    39. bean.setAddress("js_wuxi");
    40. bean.setEmail("bugyun@hotmail.com");
    41. bean.setId(1);
    42. bean.setName("bugyun");
    43. objectMapper=newObjectMapper();
    44. try{
    45. jsonGenerator=objectMapper.getJsonFactory().createJsonGenerator(System.out,JsonEncoding.UTF8);
    46. }catch(IOExceptione){
    47. e.printStackTrace();
    48. }
    49. }
    50. @After
    51. publicvoiddestory(){
    52. try{
    53. if(jsonGenerator!=null){
    54. jsonGenerator.flush();
    55. }
    56. if(!jsonGenerator.isClosed()){
    57. jsonGenerator.close();
    58. }
    59. jsonGenerator=null;
    60. objectMapper=null;
    61. bean=null;
    62. System.gc();
    63. }catch(IOExceptione){
    64. e.printStackTrace();
    65. }
    66. }
    67. /**
    68. *
    69. *@description:JavaBean(Entity/Model)转换成JSON
    70. *上面分别利用JsonGenerator的writeObject方法和ObjectMapper的writeValue方法完成对Java对象的转换,二者传递的参数及构造的方式不同;
    71. *JsonGenerator的创建依赖于ObjectMapper对象。
    72. *也就是说如果你要使用JsonGenerator来转换JSON,那么你必须创建一个ObjectMapper。
    73. *但是你用ObjectMapper来转换JSON,则不需要JSONGenerator。objectMapper的writeValue方法可以将一个Java对象转换成JSON。
    74. *这个方法的参数一,需要提供一个输出流,转换后可以通过这个流来输出转换后的内容。
    75. *或是提供一个File,将转换后的内容写入到File中。当然,这个参数也可以接收一个JSONGenerator,然后通过JSONGenerator来输出转换后的信息。
    76. *第二个参数是将要被转换的Java对象。如果用三个参数的方法,那么是一个Config。
    77. *这个config可以提供一些转换时的规则,过指定的Java对象的某些属性进行过滤或转换等。
    78. *
    79. *输出:
    80. *jsonGenerator{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}
    81. *ObjectMapper{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}
    82. *@returnvoid
    83. *@throws
    84. *@authorbeyond
    85. *@data:2016年2月24日上午11:34:53
    86. */
    87. @Test
    88. publicvoidwriteEntityJSON(){
    89. try{
    90. System.out.println("jsonGenerator");
    91. jsonGenerator.writeObject(bean);
    92. System.out.println("\nObjectMapper");
    93. objectMapper.writeValue(System.out,bean);
    94. }catch(IOExceptione){
    95. e.printStackTrace();
    96. }
    97. }
    98. /**
    99. *@description:将Map集合转换成Json字符串
    100. *输出:
    101. *jsonGenerator{"name":"bugyun","account":{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}}
    102. *ObjectMapper{"name":"bugyun","account":{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}}
    103. *@returnvoid
    104. *@throws
    105. *@authorbeyond
    106. *@data:2016年2月24日上午11:41:48
    107. */
    108. @Test
    109. publicvoidwriteMapJSON(){
    110. try{
    111. Map<String,Object>map=newHashMap<String,Object>();
    112. map.put("name",bean.getName());
    113. map.put("account",bean);
    114. System.out.println("jsonGenerator");
    115. jsonGenerator.writeObject(map);
    116. System.out.println("\nObjectMapper");
    117. objectMapper.writeValue(System.out,map);
    118. }catch(IOExceptione){
    119. e.printStackTrace();
    120. }
    121. }
    122. /**
    123. *
    124. *@description:将List集合转换成json
    125. *外面就是多了个[]中括号;同样Array也可以转换,转换的JSON和上面的结果是一样的
    126. *输出:
    127. *jsonGenerator[{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}]
    128. *ObjectMapper1###[{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}]
    129. *2###[{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}]
    130. *@returnvoid
    131. *@throws
    132. *@authorbeyond
    133. *@data:2016年2月24日上午11:46:41
    134. */
    135. @Test
    136. publicvoidwriteListJSON(){
    137. try{
    138. List<AccountBean>list=newArrayList<AccountBean>();
    139. list.add(bean);
    140. System.out.println("jsonGenerator");
    141. jsonGenerator.writeObject(list);
    142. System.out.println("\nObjectMapper");
    143. System.out.println("1###"+objectMapper.writeValueAsString(list));
    144. System.out.print("2###");
    145. objectMapper.writeValue(System.out,list);
    146. }catch(IOExceptione){
    147. e.printStackTrace();
    148. }
    149. }
    150. /**
    151. *@description:复杂的Java类型的JSON转换
    152. *输出:
    153. *{"user":{"name":"jackson","sex":true,"age":22},"infos":[22,"thisisarray"]}
    154. *{"user":{"id":1,"name":"haha","email":"email","address":"address","birthday":null},"infos":["a","b","c"]}
    155. *@returnvoid
    156. *@throws
    157. *@authorbeyond
    158. *@data:2016年2月24日下午1:08:06
    159. */
    160. @Test
    161. publicvoidwriteOthersJSON(){
    162. try{
    163. String[]arr={"a","b","c"};
    164. //Object
    165. jsonGenerator.writeStartObject();//{
    166. jsonGenerator.writeObjectFieldStart("user");//user:{
    167. jsonGenerator.writeStringField("name","jackson");//name:jackson
    168. jsonGenerator.writeBooleanField("sex",true);//sex:true
    169. jsonGenerator.writeNumberField("age",22);//age:22
    170. jsonGenerator.writeEndObject();//}
    171. jsonGenerator.writeArrayFieldStart("infos");//infos:[
    172. jsonGenerator.writeNumber(22);//22
    173. jsonGenerator.writeString("thisisarray");//thisisarray
    174. jsonGenerator.writeEndArray();//]
    175. jsonGenerator.writeEndObject();//}
    176. //********************************************
    177. AccountBeanbean=newAccountBean();
    178. bean.setAddress("address");
    179. bean.setEmail("email");
    180. bean.setId(1);
    181. bean.setName("haha");
    182. jsonGenerator.writeStartObject();//{
    183. jsonGenerator.writeObjectField("user",bean);//user:{bean}
    184. jsonGenerator.writeObjectField("infos",arr);//infos:[array]
    185. jsonGenerator.writeEndObject();//}
    186. }catch(Exceptione){
    187. e.printStackTrace();
    188. }
    189. }
    190. /**
    191. *@description:将json字符串转换成JavaBean对象
    192. *用到了ObjectMapper这个对象的readValue这个方法,这个方法需要提供2个参数。
    193. *第一个参数就是解析的JSON字符串,
    194. *第二个参数是将这个JSON解析持什么Java对象,Java对象的类型。当然,还有其他相同签名方法。
    195. *
    196. *输出:
    197. *haha
    198. *haha#1#address#null#email
    199. *@returnvoid
    200. *@throws
    201. *@authorbeyond
    202. *@data:2016年2月24日下午3:37:50
    203. */
    204. @Test
    205. publicvoidreadJson2Entity(){
    206. Stringjson="{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}";
    207. try{
    208. AccountBeanacc=objectMapper.readValue(json,AccountBean.class);
    209. System.out.println(acc.getName());
    210. System.out.println(acc);
    211. }catch(JsonParseExceptione){
    212. e.printStackTrace();
    213. }catch(JsonMappingExceptione){
    214. e.printStackTrace();
    215. }catch(IOExceptione){
    216. e.printStackTrace();
    217. }
    218. }
    219. &n
    我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
    icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved