您的位置:首页 > 编程语言 > Java开发

[项目实战]Jackson 框架之java对象和json数据转换实现

2015-01-16 15:05 459 查看
简介:
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将jsonxml转换成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类型进行输出的。
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: