Jackson 框架JSON、XML、List、Map直接相互转换
2016-10-09 21:16
405 查看
Jackson 框架,轻易转换JSON
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。一、准备工作
pom.xml 里关联jar包如下:
Xml代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://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代码
package com.bugyun.pojo;
public class AccountBean {
private int id;
private String name;
private String email;
private String address;
private Birthday birthday;
// getter、setter
@Override
public String toString() {
return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;
}
public
24000
int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Birthday getBirthday() {
return birthday;
}
public void setBirthday(Birthday birthday) {
this.birthday = birthday;
}
}
Birthday:
Java代码
package com.bugyun.pojo;
public class Birthday {
private String birthday;
public Birthday(String birthday) {
super();
this.birthday = birthday;
}
// getter、setter
public Birthday() {
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return this.birthday;
}
}
三、测试代码
Java代码
package com.bugyun.test;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.bugyun.pojo.AccountBean;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
/**
* 项目名称:jacksonTest
* 类名称:JacksonTest.java
* 类描述:
* 创建人:beyond
* 创建时间:2016年2月24日 上午11:24:33
* 修改人:
* 修改时间:
* 修改备注:
* @version
*/
public class JacksonTest {
private JsonGenerator jsonGenerator = null;
private ObjectMapper objectMapper = null;
private AccountBean bean = null;
@Before
public void init() {
bean = new AccountBean();
bean.setAddress("js_wuxi");
bean.setEmail("bugyun@hotmail.com");
bean.setId(1);
bean.setName("bugyun");
objectMapper = new ObjectMapper();
try {
jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(System.out, JsonEncoding.UTF8);
} catch (IOException e) {
e.printStackTrace();
}
}
@After
public void destory() {
try {
if (jsonGenerator != null) {
jsonGenerator.flush();
}
if (!jsonGenerator.isClosed()) {
jsonGenerator.close();
}
jsonGenerator = null;
objectMapper = null;
bean = null;
System.gc();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @description: JavaBean(Entity/Model)转换成JSON
* 上面分别利用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对象的某些属性进行过滤或转换等。
*
* 输出:
* jsonGenerator {"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}
* ObjectMapper {"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}
* @return void
* @throws
* @author beyond
* @data:2016年2月24日上午11:34:53
*/
@Test
public void writeEntityJSON() {
try {
System.out.println("jsonGenerator");
jsonGenerator.writeObject(bean);
System.out.println("\nObjectMapper");
objectMapper.writeValue(System.out, bean);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @description: 将Map集合转换成Json字符串
* 输出:
* jsonGenerator {"name":"bugyun","account":{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}}
* ObjectMapper {"name":"bugyun","account":{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}}
* @return void
* @throws
* @author beyond
* @data:2016年2月24日上午11:41:48
*/
@Test
public void writeMapJSON() {
try {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", bean.getName());
map.put("account", bean);
System.out.println("jsonGenerator");
jsonGenerator.writeObject(map);
System.out.println("\n ObjectMapper");
objectMapper.writeValue(System.out, map);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @description: 将List集合转换成json
* 外面就是多了个[]中括号;同样Array也可以转换,转换的JSON和上面的结果是一样的
* 输出:
* jsonGenerator [{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}]
* ObjectMapper 1###[{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}]
* 2###[{"id":1,"name":"bugyun","email":"bugyun@hotmail.com","address":"js_wuxi","birthday":null}]
* @return void
* @throws
* @author beyond
* @data:2016年2月24日上午11:46:41
*/
@Test
public void writeListJSON() {
try {
List<AccountBean> list = new ArrayList<AccountBean>();
list.add(bean);
System.out.println("jsonGenerator");
jsonGenerator.writeObject(list);
System.out.println("\nObjectMapper");
System.out.println("1###" + objectMapper.writeValueAsString(list));
System.out.print("2###");
objectMapper.writeValue(System.out, list);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @description: 复杂的Java类型的JSON转换
* 输出:
* {"user":{"name":"jackson","sex":true,"age":22},"infos":[22,"this is array"]}
* {"user":{"id":1,"name":"haha","email":"email","address":"address","birthday":null},"infos":["a","b","c"]}
* @return void
* @throws
* @author beyond
* @data:2016年2月24日下午1:08:06
*/
@Test
public void writeOthersJSON() {
try {
String[] arr = { "a", "b", "c" };
//Object
jsonGenerator.writeStartObject();//{
jsonGenerator.writeObjectFieldStart("user");//user:{
jsonGenerator.writeStringField("name", "jackson");//name:jackson
jsonGenerator.writeBooleanField("sex", true);//sex:true
jsonGenerator.writeNumberField("age", 22);//age:22
jsonGenerator.writeEndObject();//}
jsonGenerator.writeArrayFieldStart("infos");//infos:[
jsonGenerator.writeNumber(22);//22
jsonGenerator.writeString("this is array");//this is array
jsonGenerator.writeEndArray();//]
jsonGenerator.writeEndObject();//}
// ********************************************
AccountBean bean = new AccountBean();
bean.setAddress("address");
bean.setEmail("email");
bean.setId(1);
bean.setName("haha");
jsonGenerator.writeStartObject();//{
jsonGenerator.writeObjectField("user", bean);//user:{bean}
jsonGenerator.writeObjectField("infos", arr);//infos:[array]
jsonGenerator.writeEndObject();//}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @description: 将json字符串转换成JavaBean对象
* 用到了ObjectMapper这个对象的readValue这个方法,这个方法需要提供2个参数。
* 第一个参数就是解析的JSON字符串,
* 第二个参数是将这个JSON解析持什么Java对象,Java对象的类型。当然,还有其他相同签名方法。
*
* 输出:
* haha
* haha#1#address#null#email
* @return void
* @throws
* @author beyond
* @data:2016年2月24日下午3:37:50
*/
@Test
public void readJson2Entity() {
String json = "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}";
try {
AccountBean acc = objectMapper.readValue(json, AccountBean.class);
System.out.println(acc.getName());
System.out.println(acc);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @description: json字符串转换成list<map>
* 输出:
* address:address2
* name:haha2
* id:2
* email:email2
* address:address
* name:haha
* id:1
* email:email
* @return void
* @throws
* @author beyond
* @data:2016年2月25日下午4:39:39
*/
@Test
public void readJson2List() {
String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"
+ "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]";
try {
List<Map<String, Object>> list = objectMapper.readValue(json, List.class);
// System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
Map<String, Object> map = list.get(i);
Set<String> set = map.keySet();
for (Iterator it = set.iterator(); it.hasNext();) {
String key = (String) it.next();
System.out.println(key + ":" + map.get(key));
}
}
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @description: json字符串转换成Array
* 输出:
* haha2#2#address2#null#email2
* haha#1#address#null#email
* @return void
* @throws
* @author beyond
* @data:2016年2月25日下午4:44:09
*/
@Test
public void readJson2Array() {
String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"
+ "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]";
try {
AccountBean[] arr = objectMapper.readValue(json, AccountBean[].class);
// System.out.println(arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @description: json字符串转换Map集合
* 输出:
* success:true
* A:{address=address2, name=haha2, id=2, email=email2}
* B:{address=address, name=haha, id=1, email=email}
* @return void
* @throws
* @author beyond
* @data:2016年2月25日下午4:48:40
*/
@Test
public void readJson2Map() {
String json = "{\"success\":true,\"A\":{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"
+ "\"B\":{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}}";
try {
Map<String, Map<String, Object>> maps = objectMapper.readValue(json, Map.class);
// System.out.println(maps.size());
Set<String> key = maps.keySet();
Iterator<String> iter = key.iterator();
while (iter.hasNext()) {
String field = iter.next();
System.out.println(field + ":" + maps.get(field));
}
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @description: java Object 转换为 xml
* 输出:
* <ArrayList xmlns=""><item><id>1</id><name>bugyun</name><email>bugyun@hotmail.com</email><address>js_wuxi</address><birthday/></item></ArrayList>
* <HashMap xmlns=""><A><id>1</id><name>bugyun</name><email>bugyun@hotmail.com</email><address>js_wuxi</address><birthday/></A></HashMap>
* @return void
* @throws
* @author beyond
* @data:2016年2月26日上午9:20:49
*/
@Test
public void writeObject2Xml() {
XmlMapper xml = new XmlMapper();
try {
//javaBean转换成xml
//xml.writeValue(System.out, bean);
StringWriter sw = new StringWriter();
xml.writeValue(sw, bean);
// System.out.println(sw.toString());
// List转换成xml
List<AccountBean> list = new ArrayList<AccountBean>();
list.add(bean);
System.out.println(xml.writeValueAsString(list));
// Map转换xml文档
Map<String, AccountBean> map = new HashMap<String, AccountBean>();
map.put("A", bean);
System.out.println(xml.writeValueAsString(map));
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
<
8673
li style="font-size:1em;margin:0px 0px 0px 38px;padding:0px 0px 0px 10px;border-left:1px solid rgb(209,215,220);background-color:rgb(250,250,250);line-height:18px;">
}
相关文章推荐
- JSON ,map,list.xml相互转换
- Java_jackson_bean/map/list与json相互转换
- java解析json与map,list相互之间的转换
- java转换xml、list、map和json
- java转换xml、list、map和json
- java转换xml、list、map和json
- java转换xml、list、map和json
- 20140704-C#object/List<object>与json、xml之间的相互转换
- 本篇主要演示如何使用Jackson对List, Map和数组与JSON互相转换.
- Jackson将json字符串转换成泛型List,Map
- Jackson 框架,转换java对象、xml、json更容易
- xStream框架完美实现Java对象和xml文档JSON、XML相互转换
- Jackson 框架,转换java对象、xml、json更容易
- java中json包的使用以及字符串,map,list,自定义对象之间的相互转换
- 利用Jackson框架将json字符串转换成泛型List
- JAVA 集合List,数组,Set,Map,直接的相互转换
- 解决com.fasterxml.jackson.databind.JsonMappingException: No suitable 以 Jackson 处理复杂类型(List,map)两种方法
- JAVA 集合List,数组,Set,Map,直接的相互转换
- xStream完美转换XML、JSON xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换; 前面有介
- java转换xml、list、map和json