利用Jackson 将Javabean对象转换成Json对象

1.简述json 
json是一种轻量级的数据交换格式,其采用完全独立的文本语言格式,非常适合于web服务器和JavaScript进行交互,
其特性使它成为理想的数据交换语言,因此使其在web应用中很受欢迎。

2.使用jackson框架处理Json
jackson是用来处理POJO和JavaBean对象的一种工具,利用它可以很轻松的将Java对象转换成json对象,并且性能
远比json-lib,Gson等其它json框架而言要高

需要的jar包: 从jackson官网上可以看到其最新版本为2.0,为保险期间我们才用1.x版本的
下载地址:http://jackson.codehaus.org/1.7.6/jackson-all-1.7.6.jar

需求:用户从View输入参数,传递到后台,经过后台的数据处理,需要将处理的结果以Json的格式返回给客户端
(比如:用户进行登录时,输入用户名和密码,经过后台的数据处理将用户的所有信息保存在JavaBean当中,
Jackson要做的就是将JavaBean对象转换成Json对象)

首先建立数据模型JavaBean

public class User implements Serializable{

private int id;
private String name;
private String password;
private String telephone;

setXXX;

getXXX;
}

利用org.codehaus.jackson.map.ObjectMapper

import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestJackson {

private ObjectMapper mapper = null;

public TestJackson() {
mapper = new ObjectMapper();
}

public String PojoToJson(Object obj) {
StringWriter sw = new StringWriter();
try {
mapper.writeValue(sw, obj);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

if(sw != null) {
try {
sw.flush();
sw.close();
} catch (IOException e) {
e.printStackTrace();
}
}

return sw.toString();

}

@SuppressWarnings("unchecked")
public static void main(String[] args) {
TestJackson test = new TestJackson();

User user = new User();

user.setId(1);
user.setName("name");
user.setPassword("password");
user.setTelephone("1234565");

List list = new ArrayList();
list.add(1);
list.add(12);
list.add(123);
list.add(123);

Map map = new HashMap();
Map map1 = new HashMap();
map1.put("city", "bejing");
map1.put("district", "tianjin");

map.put("name", "foreveross");
map.put("address", map1);


System.out.println(test.PojoToJson(user));
System.out.println(test.PojoToJson(list));
System.out.println(test.PojoToJson(map));

}

}

结果:

{"id":1,"name":"name","password":"password","telephone":"1234565"}
[1,12,123,123]
{"address":{"district":"tianjin","city":"bejing"},"name":"foreveross"}

此种方法主要利用mapper.writeValue方法 ,此方法使用提供的输出流,可以序列化
任何Java的值作为Json格式输出

利用org.codehaus.jackson.map.ObjectMapper

import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestJackson {

private JsonGenerator jsonGenerator = null;

private ObjectMapper objectMapper = null;

private OutputStream os = System.out;

public TestJackson() {
objectMapper = new ObjectMapper();

try {

jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(
os, JsonEncoding.UTF8);

} catch (IOException e) {

e.printStackTrace();
}

}

public String PojoToJson(Object obj) {

try {
jsonGenerator.writeObject(obj);
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return os.toString().substring(0,
os.toString().lastIndexOf("java.io.PrintStream"));
}

public void close() {

try {

if (jsonGenerator != null) {
jsonGenerator.flush();
}
if (!jsonGenerator.isClosed()) {
jsonGenerator.close();
}

if (os != null) {
os.close();
}

} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
Test2 t = new Test2();
User user = new User();

user.setId(1);
user.setName("name");
user.setPassword("password");
user.setTelephone("1234565");

Map<String, Object> userData = new HashMap<String, Object>();
Map<String, String> nameStruct = new HashMap<String, String>();
nameStruct.put("first", "Joe");
nameStruct.put("last", "Sixpack");
userData.put("name", nameStruct);
userData.put("gender", "MALE");
userData.put("verified", Boolean.FALSE);
userData.put("userImage", "Rm9vYmFyIQ==");

System.out.println(t.PojoToJson(userData));
System.out.println(t.PojoToJson(user));
t.close();

}

}

上面分别利用ObjectMapper的writeValue方法和JsonGenerator的writeObject方法完成对Java对象的转换,
二者传递的参数及构造的方式不同;JsonGenerator的创建依赖于ObjectMapper对象。 也就是说如果你要使用JsonGenerator来转换JSON.
那么你必须创建一个ObjectMapper。但是你用ObjectMapper来转换JSON,则不需要JSONGenerator。

猜你喜欢

转载自xiaoeryang.iteye.com/blog/1841045
今日推荐