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。
利用Jackson 将Javabean对象转换成Json对象
最新推荐文章于 2022-07-12 00:06:55 发布