Jackson 框架 json 到 复杂 list 的转换

详情代码:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>jacksonPrograme</groupId>
	<artifactId>jacksonPrograme</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
	</dependencies>

	<packaging>jar</packaging>
</project>

JsonUtil.json

package com.bugyun.test;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
import org.codehaus.jackson.type.JavaType;

public class JsonUtil {
	
	private final static Logger log = Logger.getLogger(JsonUtil.class);
	private static final ObjectMapper mapper = new ObjectMapper();

	static {
		mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
			@Override
			public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
				jgen.writeString("");
			}
		});

		mapper.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		mapper.setSerializationInclusion(Inclusion.NON_NULL);
		mapper.setSerializationInclusion(Inclusion.NON_EMPTY);
		mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
	}


	/**
	 * @description: json字符串转换成java对象
	 * @param json
	 * @param clzss
	 * @return T    
	 * @throws
	 * @author beyond
	 * @data:2016年2月26日上午11:00:03
	 */
	public static <T> T jsonToObject(String json, Class<T> clzss) {
		T obj = null;
		try {
			obj = mapper.readValue(json, clzss);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return obj;
	}

	
	/**
	 * @description: 获取泛型的Collection Type
	 * @param collectionClass	泛型的Collection
	 * @param elementClasses	元素类
	 * @return JavaType    
	 * @throws
	 * @author beyond
	 * @data:2016年2月26日上午11:00:30
	 */
	public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
		ObjectMapper mapper = new ObjectMapper();
		return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
	}
	
	
	
	public static void main(String[] args) {
		String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"
				+ "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]";
		try {
			ObjectMapper mapper = new ObjectMapper(); 
			JavaType javaType = JsonUtil.getCollectionType(ArrayList.class, Map.class); 
			List<Map<String,Object>> list =  (List<Map<String,Object>>)mapper.readValue(json, javaType);
			for(Map<String,Object> map : list){
				System.out.println(map);
			}
			
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	

}

猜你喜欢

转载自bugyun.iteye.com/blog/2279033