java中似乎没提供一个将json字符串转换成对应的list或者map或者自定义的实体类。今天我们就来看看怎样将json转换成java对象

首先要导入json的jar包( 首先到官网下载)。有包名org.json命名的的json.jar和包名为net.sf.json的json-lib.jar;两个包有所不同,大家要注意,我这里采用后面的jar包。json-lib-2.3-jdk13.jar,大家在使用的时候还要注意所支持的jdk版本,如这是支持jdk1.5以前版本的jar包,json-lib-2.3-jdk15.jar则只支持jdk1.5及以上版本,另外这个包还依赖ezmorph.jar,commons-lang.jar; commons-beanutils.jar;commons-collections.jar;commons-logging.jar;这 些jar包。ezmorph.jar最好用1.0.6版本。 

package com.core.common.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsDateJsonValueProcessor;
import net.sf.json.util.JSONUtils;

/**
 * @author :lych
 * @date:2014.5.8
 * @reviser:lych
 * @reviseDate:2014.5.8
 * @description:操作Json格式的工具类
 * @version: 1.0
 */
public class JsonUtil{

	private static void setDataFormat2JAVA(){
		// 设定日期转换格式
		JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss" }));
	}

	/**
	 * 将数据对象转换成Json格式字符串
	 * 
	 * @param object  POJO、Collection或Object[]
	 * @return String
	 */
	public static String beanToJson(Object object){
		String jsonString = null;
		// 日期值处理器
		JsonConfig jsonConfig = new JsonConfig();
		jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsDateJsonValueProcessor());
		if(object != null){
			if(object instanceof Collection || object instanceof Object[]){
				jsonString = JSONArray.fromObject(object, jsonConfig).toString();
			}else{
				jsonString = JSONObject.fromObject(object, jsonConfig).toString();
			}
		}
		return jsonString == null ? "{}" : jsonString;
	}

	/**
	 * 将Map数据对象转换成Json格式字符串
	 * 
	 * @param map
	 *            Map对象
	 * @return String
	 */
	public static String mapToJson(Map map){
		return beanToJson(map);
	}

	/**
	 * 将Collection数据对象转换成Json格式字符串
	 * 
	 * @param coll
	 *            Collection对象
	 * @return String
	 */
	public static String listToJson(Collection coll){
		return beanToJson(coll);
	}

	/**
	 * 将Object数组数据对象转换成Json格式字符串
	 * 
	 * @param objects
	 *            Object对象数组
	 * @return String
	 */
	public static String arrayToJson(Object[] objects){
		return beanToJson(objects);
	}

	/**
	 * 将Json格式字符串转换成Java对象
	 * 
	 * @param jsonString
	 *            Json格式字符串
	 * @param beanClass
	 *            Java对象Class
	 * @return Object
	 */
	public static Object jsonToBean(String jsonString,Class beanClass){
		JSONObject jsonObject = null;
		try{
			setDataFormat2JAVA();
			jsonObject = JSONObject.fromObject(jsonString);
		}
		catch (Exception e){
			e.printStackTrace();
		}
		return JSONObject.toBean(jsonObject, beanClass);
	}

	/**
	 * 将Json格式字符串转换成Java对象
	 * 
	 * @param jsonString
	 *            Json格式字符串
	 * @param beanClass
	 *            Java对象Class
	 * @param classMap
	 *            包含的对象集合中的Java对象Class
	 * @return Object
	 */
	public static Object jsonToBean(String jsonString,Class beanClass,Map classMap){
		JSONObject jsonObject = null;
		try{
			setDataFormat2JAVA();
			jsonObject = JSONObject.fromObject(jsonString);
		}
		catch (Exception e){
			e.printStackTrace();
		}
		return JSONObject.toBean(jsonObject, beanClass, classMap);
	}

	/**
	 * 将Json格式字符串转换成Java对象数组
	 * 
	 * @param jsonString
	 *            Json格式字符串
	 * @param beanClass
	 *            Java对象Class
	 * @return Object[]
	 */
	public static Object[] jsonToArray(String jsonString,Class beanClass){
		setDataFormat2JAVA();
		JSONArray array = JSONArray.fromObject(jsonString);
		Object[] obj = new Object[array.size()];
		for(int i = 0;i < array.size();i++){
			JSONObject jsonObject = array.getJSONObject(i);
			obj[i] = JSONObject.toBean(jsonObject, beanClass);
		}
		return obj;
	}

	/**
	 * 将Json格式字符串转换成Java对象数组
	 * 
	 * @param jsonString
	 *            Json格式字符串
	 * @param beanClass
	 *            Java对象Class
	 * @param classMap
	 *            包含的对象集合中的Java对象Class
	 * @return Object[]
	 */
	public static Object[] jsonToArray(String jsonString,Class beanClass,Map classMap){
		setDataFormat2JAVA();
		JSONArray array = JSONArray.fromObject(jsonString);
		Object[] obj = new Object[array.size()];
		for(int i = 0;i < array.size();i++){
			JSONObject jsonObject = array.getJSONObject(i);
			obj[i] = JSONObject.toBean(jsonObject, beanClass, classMap);
		}
		return obj;
	}

	/**
	 * 将Json格式字符串转换成Java对象集合
	 * 
	 * @param jsonString
	 *            Json格式字符串
	 * @param beanClass
	 *            Java对象Class
	 * @return List
	 */
	public static List jsonToList(String jsonString,Class beanClass){
		setDataFormat2JAVA();
		JSONArray array = JSONArray.fromObject(jsonString);
		List list = new ArrayList();
		for(Iterator iter = array.iterator();iter.hasNext();){
			JSONObject jsonObject = (JSONObject) iter.next();
			list.add(JSONObject.toBean(jsonObject, beanClass));
		}
		return list;
	}

	/**
	 * 将Json格式字符串转换成Java对象集合
	 * 
	 * @param jsonString
	 *            Json格式字符串
	 * @param beanClass
	 *            Java对象Class
	 * @param classMap
	 *            包含的对象集合中的Java对象Class
	 * @return
	 */
	public static List jsonToList(String jsonString,Class beanClass,Map classMap){
		setDataFormat2JAVA();
		JSONArray array = JSONArray.fromObject(jsonString);
		List list = new ArrayList();
		for(Iterator iter = array.iterator();iter.hasNext();){
			JSONObject jsonObject = (JSONObject) iter.next();
			list.add(JSONObject.toBean(jsonObject, beanClass, classMap));
		}
		return list;
	}

	/**
	 * 将Json格式字符串转换成Map对象
	 * 
	 * @param jsonString
	 *            Json格式字符串
	 * @return Map
	 */
	public static Map jsonToMap(String jsonString){
		setDataFormat2JAVA();
		JSONObject jsonObject = JSONObject.fromObject(jsonString);
		Map map = new HashMap();
		for(Iterator iter = jsonObject.keys();iter.hasNext();){
			String key = (String) iter.next();
			map.put(key, jsonObject.get(key));
		}
		return map;
	}

	/**
	 * 将Json格式字符串转换成Object对象数组
	 * 
	 * @param jsonString
	 *            Json格式字符串
	 * @return Object[]
	 */
	public static Object[] jsonToArray(String jsonString){
		JSONArray jsonArray = JSONArray.fromObject(jsonString);
		return jsonArray.toArray();
	}
	
	
}

方法二:

导入这两个jar包,下载见附件:

jackson-core-asl-1.9.12.jar

jackson-mapper-asl-1.9.12.jar

package com.rf.dtd.datacommons;

import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParser.Feature;
import org.codehaus.jackson.map.DeserializationConfig.Feature;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig.Feature;
import org.codehaus.jackson.node.TextNode;
import org.codehaus.jackson.type.TypeReference;

public abstract class JsonUtil
{
  public static void main(String[] args)
  {
    Object ss = parseJson("{\"datasourceId\":12201,\"dsName\":\"bj\",\"jndiName\":\"\",\"driverClass\":\"oracle.jdbc.OracleDriver\",\"jdbcURL\":\"jdbc:oracle:thin:@10.88.107.250:1521:orcl\",\"userName\":\"devtest\",\"password\":\"devtest\"}");

    String josnString = "{ \"excelName\" : \"组织结构模板.xls\", \"sheet\" : [ { \"entryCode\" : \"epdm_pcOrganizationT\", \"columns\" : [ { \"field\" : \"orgName\", \"title\" : \"机构名称\" }, { \"field\" : \"orgCode\", \"title\" : \"机构代码\" }, { \"field\" : \"canton\", \"title\" : \"行政区名称\" }, { \"field\" : \"cantonCode\", \"title\" : \"行政区代码\" }, { \"field\" : \"mailingAddress\", \"title\" : \"邮递地址\" }, { \"field\" : \"orgId\", \"title\" : \"ORG_ID\" }, { \"field\" : \"orgLevel\", \"title\" : \"级别\" }, { \"field\" : \"parentId\", \"title\" : \"上级机构名称\" } ], \"sheetName\" : \"Sheet1\", \"rows\" : [ { \"\" : \"\", \"orgId\" : \"444.0\", \"parentId\" : \"雍和宫\", \"cantonCode\" : \"7777.0\", \"orgCode\" : \"9999.0\", \"canton\" : \"石景山\", \"orgName\" : \"八角\", \"mailingAddress\" : \"102300.0\", \"orgLevel\" : \"中级\" }, { \"\" : \"\", \"orgId\" : \"444.0\", \"parentId\" : \"雍和宫\", \"cantonCode\" : \"7777.0\", \"orgCode\" : \"10000.0\", \"canton\" : \"石景山\", \"orgName\" : \"八角\", \"mailingAddress\" : \"102300.0\", \"orgLevel\" : \"中级\" }, { \"\" : \"\", \"orgId\" : \"444.0\", \"parentId\" : \"雍和宫\", \"cantonCode\" : \"7777.0\", \"orgCode\" : \"10001.0\", \"canton\" : \"石景山\", \"orgName\" : \"八角\", \"mailingAddress\" : \"102300.0\", \"orgLevel\" : \"中级\" }, { \"\" : \"\", \"orgId\" : \"444.0\", \"parentId\" : \"雍和宫\", \"cantonCode\" : \"7777.0\", \"orgCode\" : \"10002.0\", \"canton\" : \"石景山\", \"orgName\" : \"八角\", \"mailingAddress\" : \"102300.0\", \"orgLevel\" : \"中级\" } ] }, { \"entryCode\" : \"epdm_pcOrganizationT\", \"columns\" : [ { \"field\" : \"orgName\", \"title\" : \"机构名称\" }, { \"field\" : \"orgCode\", \"title\" : \"机构代码\" }, { \"field\" : \"canton\", \"title\" : \"行政区名称\" }, { \"field\" : \"cantonCode\", \"title\" : \"行政区代码\" }, { \"field\" : \"mailingAddress\", \"title\" : \"邮递地址\" }, { \"field\" : \"orgId\", \"title\" : \"ORG_ID\" }, { \"field\" : \"orgLevel\", \"title\" : \"级别\" }, { \"field\" : \"parentId\", \"title\" : \"上级机构名称\" } ], \"sheetName\" : \"Sheet2\", \"rows\" : [ { \"\" : \"\", \"orgId\" : \"444.0\", \"parentId\" : \"雍和宫\", \"cantonCode\" : \"7777.0\", \"orgCode\" : \"888.0\", \"canton\" : \"石景山\", \"orgName\" : \"八角\", \"mailingAddress\" : \"102300.0\", \"orgLevel\" : \"中级\" }, { \"\" : \"\", \"orgId\" : \"444.0\", \"parentId\" : \"雍和宫\", \"cantonCode\" : \"7777.0\", \"orgCode\" : \"889.0\", \"canton\" : \"石景山\", \"orgName\" : \"八角\", \"mailingAddress\" : \"102300.0\", \"orgLevel\" : \"中级\" }, { \"\" : \"\", \"orgId\" : \"444.0\", \"parentId\" : \"雍和宫\", \"cantonCode\" : \"7777.0\", \"orgCode\" : \"890.0\", \"canton\" : \"石景山\", \"orgName\" : \"八角\", \"mailingAddress\" : \"102300.0\", \"orgLevel\" : \"中级\" }, { \"\" : \"\", \"orgId\" : \"444.0\", \"parentId\" : \"雍和宫\", \"cantonCode\" : \"7777.0\", \"orgCode\" : \"891.0\", \"canton\" : \"石景山\", \"orgName\" : \"八角\", \"mailingAddress\" : \"102300.0\", \"orgLevel\" : \"中级\" } ] } ] }";

    Object sssw = parseJson(josnString);
    int rrrr = 0;
  }

  public static ObjectMapper getObjectMapper() {
    ObjectMapper om = new ObjectMapper().setAnnotationIntrospector(new JpaLazyIntrospector());

    om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    om.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
    om.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
    om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    om.configure(DeserializationConfig.Feature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
    om.configure(DeserializationConfig.Feature.FAIL_ON_NUMBERS_FOR_ENUMS, false);
    om.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
    om.configure(DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
    om.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

    return om;
  }

  public static String toJsonString(Object object)
  {
    try
    {
      return getObjectMapper().writeValueAsString(object);
    } catch (IOException ex) {
      throw new RuntimeException(ex);
    }
  }

  public static void writeJsonString(Object object, Writer writer)
  {
    try
    {
      getObjectMapper().writeValue(writer, object);
    } catch (IOException ex) {
      throw new RuntimeException(ex);
    }
  }

  public static Map parseJson(String jsonString)
  {
    JsonNode jn = null;
    try {
      jn = getObjectMapper().readTree(jsonString);
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    return ((Map)JsonNodeToMap(jn));
  }

  public static Object parseJson2MapOrList(String jsonString)
  {
    JsonNode jn = null;
    try {
      jn = getObjectMapper().readTree(jsonString);
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    return JsonNodeToMap(jn);
  }

  public static <T> T parseJson(String jsonString, Class<T> classType)
  {
    JsonNode jn = null;
    try {
      return getObjectMapper().readValue(jsonString, classType);
    } catch (Exception ex) {
      ex.printStackTrace(); }
    return null;
  }

  public static <T> T parseJson(String jsonString, TypeReference<T> typeReference)
  {
    try
    {
      return getObjectMapper().readValue(jsonString, typeReference);
    } catch (Exception ex) {
      ex.printStackTrace(); }
    return null;
  }

  public static <T> T parseJsonT(String jsonString)
  {
    try
    {
      return getObjectMapper().readValue(jsonString, new TypeReference() { } );
    }
    catch (Exception ex) {
      ex.printStackTrace(); }
    return null;
  }

  public static <T> Map bean2Map(Object bean)
  {
    try
    {
      return ((Map)getObjectMapper().convertValue(bean, Map.class));
    } catch (Exception ex) {
      ex.printStackTrace(); }
    return null;
  }

  public static <T> T map2Bean(Map map, Class<T> clazz)
  {
    try
    {
      return getObjectMapper().convertValue(map, clazz);
    } catch (Exception ex) {
      ex.printStackTrace(); }
    return null;
  }

  public static Object JsonNodeToMap(JsonNode root)
  {
    Map map = new LinkedHashMap();
    if (root == null)
      return map;

    if (root.isArray()) {
      List list = new ArrayList();
      for (Iterator i$ = root.iterator(); i$.hasNext(); ) { JsonNode node = (JsonNode)i$.next();
        Map nmp = (Map)JsonNodeToMap(node);
        list.add(nmp);
      }
      return list;
    }
    Iterator iter = root.getFields();
    while (iter.hasNext()) {
      Map.Entry entry = (Map.Entry)iter.next();
      String key = (String)entry.getKey();
      JsonNode ele = (JsonNode)entry.getValue();
      if (ele.isObject())
        map.put(key, JsonNodeToMap(ele));
      else if (ele.isTextual())
        map.put(key, ((TextNode)ele).asText());
      else if (ele.isArray())
        map.put(key, JsonNodeToMap(ele));
      else
        map.put(key, ele.toString());
    }

    return map;
  }
}