自己写的JSON 工具类,封装一些常用的方法

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一个新的项目要用到JSON ,很多工具要手写,所以写一个工具类出来,以后可以直接拿过来用,这里就算保存一下。</span>

废话不多说,直接上代码,借鉴了网上一些文章的代码。


package util;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.sf.ezmorph.MorpherRegistry;
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.JsonValueProcessor;
import net.sf.json.util.JSONUtils;
import net.sf.json.xml.XMLSerializer;

/**
 * Json工具类
 * @author LiuQi
 *
 */
public class JsonUtil {

	/**
	 * 设置日期转换格式
	 */
	static {
		// 注册器
		MorpherRegistry mr = JSONUtils.getMorpherRegistry();

		// 可转换的日期格式,即Json串中可以出现以下格式的日期与时间
		DateMorpher dm = new DateMorpher(new String[] { DateUtil.YYYY_MM_DD,
				DateUtil.YYYY_MM_DD_HH_MM_ss, DateUtil.HH_MM_ss,
				DateUtil.YYYYMMDD, DateUtil.YYYYMMDDHHMMSS, DateUtil.HHMMss });
		mr.registerMorpher(dm);
	}

	/**
	 * 从json串转换成实体对象
	 * 
	 * @param jsonObjStr
	 * @param clazz
	 * @return
	 */
	public static Object getDtoFromJsonObjStr(String jsonObjStr, Class<?> clazz) {
		return JSONObject.toBean(JSONObject.fromObject(jsonObjStr), clazz);
	}

	/**
	 * 从json串转换成实体对象,并且实体集合属性存有另外实体Bean
	 * 
	 * @param jsonObjStr
	 * @param clazz
	 * @param classMap
	 * @return Object
	 */
	public static Object getDtoFromJsonObjStr(String jsonObjStr, Class<?> clazz,
			Map<?, ?> classMap) {
		return JSONObject.toBean(JSONObject.fromObject(jsonObjStr), clazz,
				classMap);
	}

	/**
	 * 把一个json数组串转换成普通数组
	 * 
	 * @param jsonArrStr
	 * @return Object[]
	 */
	public static Object[] getArrFromJsonArrStr(String jsonArrStr) {
		return JSONArray.fromObject(jsonArrStr).toArray();
	}

	/**
	 * 把一个json数组串转换成实体数组
	 * 
	 * @param jsonArrStr
	 * @param clazz
	 * @return Object[]
	 */
	public static Object[] getDtoArrFromJsonArrStr(String jsonArrStr,
			Class<?> clazz) {
		JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);
		Object[] objArr = new Object[jsonArr.size()];
		for (int i = 0; i < jsonArr.size(); i++) {
			objArr[i] = JSONObject.toBean(jsonArr.getJSONObject(i), clazz);
		}
		return objArr;
	}

	/**
	 * 把一个json数组串转换成实体数组,且数组元素的属性含有另外实例Bean
	 * 
	 * @param jsonArrStr
	 * @param clazz
	 * @param classMap
	 * @return Object[]
	 */
	public static Object[] getDtoArrFromJsonArrStr(String jsonArrStr,
			Class<?> clazz, Map<?, ?> classMap) {
		JSONArray array = JSONArray.fromObject(jsonArrStr);
		Object[] obj = new Object[array.size()];
		for (int i = 0; i < array.size(); i++) {
			JSONObject jsonObject = array.getJSONObject(i);
			obj[i] = JSONObject.toBean(jsonObject, clazz, classMap);
		}
		return obj;
	}

	/**
	 * 把一个json数组串转换成存放普通类型元素的集合
	 * 
	 * @param jsonArrStr
	 * @return List
	 */
	public static List<Object> getListFromJsonArrStr(String jsonArrStr) {
		JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);
		List<Object> list = new ArrayList<Object>();
		for (int i = 0; i < jsonArr.size(); i++) {
			list.add(jsonArr.get(i));
		}
		return list;
	}

	/**
	 * 把一个json数组串转换成集合,且集合里存放的为实例Bean
	 * 
	 * @param jsonArrStr
	 * @param clazz
	 * @return List
	 */
	public static List<Object> getListFromJsonArrStr(String jsonArrStr, Class<?> clazz) {
		JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);
		List<Object> list = new ArrayList<Object>();
		for (int i = 0; i < jsonArr.size(); i++) {
			list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz));
		}
		return list;
	}

	/**
	 * 把一个json数组串转换成集合,且集合里的对象的属性含有另外实例Bean
	 * 
	 * @param jsonArrStr
	 * @param clazz
	 * @param classMap
	 * @return List
	 */
	public static List<Object> getListFromJsonArrStr(String jsonArrStr, Class<?> clazz,
			Map<?, ?> classMap) {
		JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);
		List<Object> list = new ArrayList<Object>();
		for (int i = 0; i < jsonArr.size(); i++) {
			list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz,
					classMap));
		}
		return list;
	}

	/**
	 * 把json对象串转换成map对象
	 * 
	 * @param jsonObjStr
	 * @return Map
	 */
	@SuppressWarnings("unchecked")
	public static Map<String, Object> getMapFromJsonObjStr(String jsonObjStr) {
		JSONObject jsonObject = JSONObject.fromObject(jsonObjStr);

		Map<String, Object> map = new HashMap<String, Object>();
		for (Iterator<String> iter = jsonObject.keys(); iter.hasNext();) {
			String key = (String) iter.next();
			map.put(key, jsonObject.get(key));
		}
		return map;
	}

	/**
	 * 把json对象串转换成map对象,且map对象里存放的为其他实体Bean
	 * 
	 * @param jsonObjStr
	 * @param clazz
	 * @return Map
	 */
	@SuppressWarnings("unchecked")
	public static Map<String, Object> getMapFromJsonObjStr(String jsonObjStr, Class<?> clazz) {
		JSONObject jsonObject = JSONObject.fromObject(jsonObjStr);

		Map<String, Object> map = new HashMap<String, Object>();
		for (Iterator<String> iter = jsonObject.keys(); iter.hasNext();) {
			String key = (String) iter.next();
			map.put(key,
					JSONObject.toBean(jsonObject.getJSONObject(key), clazz));
		}
		return map;
	}

	/**
	 * 把json对象串转换成map对象,且map对象里存放的其他实体Bean还含有另外实体Bean
	 * 
	 * @param jsonObjStr
	 * @param clazz
	 * @param classMap
	 * @return Map
	 */
	@SuppressWarnings("unchecked")
	public static Map<String, Object> getMapFromJsonObjStr(String jsonObjStr,
			Class<?> clazz, Map<?, ?> classMap) {
		JSONObject jsonObject = JSONObject.fromObject(jsonObjStr);

		Map<String, Object> map = new HashMap<String, Object>();
		for (Iterator<String> iter = jsonObject.keys(); iter.hasNext();) {
			String key = (String) iter.next();
			map.put(key, JSONObject.toBean(jsonObject.getJSONObject(key),
					clazz, classMap));
		}
		return map;
	}

	/**
	 * 把实体Bean、Map对象、数组、列表集合转换成Json串
	 * 
	 * @param obj
	 * @return
	 * @throws Exception
	 * 
	 */
	public static String getJsonStr(Object obj) {
		String jsonStr = null;
		// Json配置
		JsonConfig jsonCfg = new JsonConfig();

		// 注册日期处理器
		jsonCfg.registerJsonValueProcessor(java.util.Date.class,
				new JsonDateValueProcessor(DateUtil.YYYY_MM_DD_HH_MM_ss));
		if (obj == null) {
			return "{}";
		}

		if (obj instanceof Collection || obj instanceof Object[]) {
			jsonStr = JSONArray.fromObject(obj, jsonCfg).toString();
		} else {
			jsonStr = JSONObject.fromObject(obj, jsonCfg).toString();
		}

		return jsonStr;
	}

	/**
	 * 把json串、数组、集合(collection map)、实体Bean转换成XML XML
	 * 
	 * @param obj
	 * @return
	 * @throws Exception
	 * 
	 */
	public static String getXMLFromObj(Object obj) {
		XMLSerializer xmlSerial = new XMLSerializer();

		// Json配置
		JsonConfig jsonCfg = new JsonConfig();

		// 注册日期处理器
		jsonCfg.registerJsonValueProcessor(java.util.Date.class,
				new JsonDateValueProcessor(DateUtil.YYYY_MM_DD_HH_MM_ss));

		if ((String.class.isInstance(obj) && String.valueOf(obj)
				.startsWith("["))
				|| obj.getClass().isArray()
				|| Collection.class.isInstance(obj)) {
			JSONArray jsonArr = JSONArray.fromObject(obj, jsonCfg);
			return xmlSerial.write(jsonArr);
		} else {
			JSONObject jsonObj = JSONObject.fromObject(obj, jsonCfg);
			return xmlSerial.write(jsonObj);
		}
	}

	/**
	 * 从XML转json串
	 * 
	 * @param xml
	 * @return String
	 */
	public static String getJsonStrFromXML(String xml) {
		XMLSerializer xmlSerial = new XMLSerializer();
		return String.valueOf(xmlSerial.read(xml));
	}

}

/**
 * json日期值处理器实现
 */
class JsonDateValueProcessor implements JsonValueProcessor {

	private String format = DateUtil.YYYY_MM_DD_HH_MM_ss;

	public JsonDateValueProcessor() {

	}

	public JsonDateValueProcessor(String format) {
		this.format = format;
	}

	public Object processArrayValue(Object value, JsonConfig jsonConfig) {
		return process(value, jsonConfig);
	}

	public Object processObjectValue(String key, Object value,
			JsonConfig jsonConfig) {
		return process(value, jsonConfig);
	}

	private Object process(Object value, JsonConfig jsonConfig) {
		if (value instanceof Date) {
			String str = new SimpleDateFormat(format).format((Date) value);
			return str;
		}
		return value == null ? null : value.toString();
	}

	public String getFormat() {
		return format;
	}

	public void setFormat(String format) {
		this.format = format;
	}

}


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值