简介: Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。
官方wiki:http://wiki.fasterxml.com/JacksonInFiveMinutes
官方文档:http://wiki.fasterxml.com/JacksonDocumentation
github:https://github.com/FasterXML/jackson
一、准备工作 jackson-databind 下载地址: http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/ 注意:使用此功能需要依赖以下jar文件 jackson-core 和 jackson-annotations github: https://github.com/FasterXML/jackson-annotations 下载地址:http://repo1.maven.org/maven2/com/fasterxml/jackson/core/ 二、实例 (1)java对象转JSON
/***
* json转clazz类(不含类中属性数据验证)
*/
public static Object jsonToObject(String jsonString, Class clazz){
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(jsonString, clazz);
}catch (Exception e) {
// TODO Auto-generated catch block
}
}
(2)json转java对象
json结构:
实现方法:
/***
* json转clazz类(不含类中属性数据验证)
*/
public static Object jsonToObject(String jsonString, Class clazz){
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(jsonString, clazz);
}catch (Exception e) {
// TODO Auto-generated catch block
}
}
(3)java对象转xml(依赖于stax2-api.jar)
XmlMapper xml = new XmlMapper();
StringWriter sw = new StringWriter();
xml.writeValue(sw, bean);
(4)json中取属性值
/**
* 实现将包含单一对象和其他集合的json串中的单一对象转换为对象
* @param data :json字符串
* @param nodeName :预获取的节点名称
* @param cls:节点对应转换的对象
* @return
*/
public static Object parseJsonToObject(String data, String nodeName, Class<?> cls) {
// 用来展现解析Json得到的值
Object object = null;
ObjectMapper mapper = new ObjectMapper();
try {
JsonNode rootNode = mapper.readTree(data); // 读取Json
// rootNode.path("xx")返回的还是一个JsonNode对象,调用该JsonNode的相应方法,得到键对应的值
JsonNode strs = rootNode.path(nodeName);
// JsonNode strs1 = rootNode.get(nodeName);
if (!"".equals(strs)) {
object = mapper.readValue(strs.toString(), cls);
}
} catch (Exception e) {
}
return object;
}
/**
* 实现获取json串中预获取的节点部分
* @param data:json字符串
* @param nodeName:预获取的节点名称
* @return
*/
public static String parseJson(String data, String nodeName) {
// 用来展现解析Json得到的值
StringBuffer buf = new StringBuffer();
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode;
try {
rootNode = mapper.readTree(data);
// 读取Json
// rootNode.path("xx")返回的还是一个JsonNode对象,调用该JsonNode的相应方法,得到键对应的值
String strs = "";
if(rootNode.path(nodeName).getClass()==ObjectNode.class){
strs = (rootNode.path(nodeName)==null ? "" :rootNode.path(nodeName)).toString();
}else{
strs = rootNode.path(nodeName).asText();// JsonNode strs1 =rootNode.get(nodeName);
}
buf.append(strs);
} catch (Exception e) {
e.printStackTrace();
}
return buf.toString();
}
(5)json转List
/**
* json转List
* @param data:json数据
* @param nodeName:预获取的节点名称
* @param clazz:节点对应转换的对象
* @return
*/
public static <T> List<T> parseJsonToList(String data, String nodeName, Class<?> clazz) {
List<T> list = null;
TypeFactory t = TypeFactory.defaultInstance();
// 指定容器结构和类型(这里是ArrayList和clazz)
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode;
try {
rootNode = mapper.readTree(data);// 读取Json
// rootNode.path("xx")返回的还是一个JsonNode对象,调用该JsonNode的相应方法,得到键对应的值
if (null != rootNode.get(nodeName)) {
JsonNode strs = rootNode.path(nodeName);
// JsonNode strs1 = // rootNode.get(nodeName);
list = mapper.readValue(strs.toString(),t.constructCollectionType(ArrayList.class, clazz));
}
// 如果T确定的情况下可以使用下面的方法:
// List<T> list = mapper.readValue(jsonVal, new TypeReference<List<T>>() {});
} catch (IOException e) {
}
return list;
}
三、小结 1.json中的key必须与与java对象中的field属性对应。 2.Date是以long类型进行输出的。