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

简介:
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/

二、实例
1java对象转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
		}
    }
 2jsonjava对象
 json结构: [项目实战]Jackson 框架之java对象和json数据转换实现_第1张图片
实现方法:
    /***
     * 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
		}
    }
 
3java对象转xml(依赖于stax2-api.jar)
XmlMapper xml = new XmlMapper();
StringWriter sw = new StringWriter();
xml.writeValue(sw, bean);
 
4json中取属性值
    /**
     * 实现将包含单一对象和其他集合的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();
    }
 
5jsonList
    /**
     * 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类型进行输出的。

你可能感兴趣的:(json)