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;
}
}