当前位置: 首页 > 工具软件 > JSONHelper > 使用案例 >

java实现json解析与序列化的辅助类-JSONHelper

幸弘扬
2023-12-01

背景

目前json已经成为了非常常用的数据交换格式,不管你是开发钉钉应用、微信应用、还是企业级的应用,关于json的解析与序列化操作无处不在,为了方便操作,通常会把基本的解析与序列化操作进行封装。

说明:
本类需要依赖org.json包中的类,org.json的源码已分享,下载地址:https://download.csdn.net/download/zlbdmm/12363370

代码实现

package com.mesnac.util;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * 处理json字符串的工具类
 * 
 * @author 郑立兵
 * 
 */
public class JSONHelper {
	/**
	 * 把Json对象转换位实体类的对象
	 * @param jsonObj
	 * 			json对象
	 * @param clazz
	 * 			要转换实体类的类型信息
	 * @return 返回对应的实体对象
	 */
	public static <T> T jsonObjToEntity(JSONObject jsonObj, Class<T> clazz) {
		try {
			T entity = clazz.newInstance();
			String[] names = jsonObj.getNames(jsonObj);
			Map<String, String> map = new HashMap<String, String>();
			for (String name : names) {
				map.put(name, name);
			}
			Method[] methods = clazz.getDeclaredMethods();
			for (Method m : methods) {
				if (m.getName().startsWith("set")) {
					String key = m.getName().substring(3).toLowerCase();
					if (map.containsKey(key)) {
						Object value = jsonObj.get(key);
						m.invoke(entity, value);
					}
				}
			}
			return entity;
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 把Json字符串转换位实体类的对象
	 * 
	 * @param jsonStr
	 *            json格式字符串
	 * @param clazz
	 *            要转换实体类的类型信息
	 * @return 返回对应的实体对象
	 */
	public static <T> T jsonToEntity(String jsonStr, Class<T> clazz) {
		JSONObject jsonObj = new JSONObject(jsonStr);
		return jsonObjToEntity(jsonObj, clazz);
	}
	/**
	 * 把Json字符串转换位实体类的集合
	 * 
	 * @param jsonArrStr
	 *            json格式字符串(数组)
	 * @param clazz
	 *            要转换集合元素的类型信息
	 * @return 返回对应的实体集合
	 */
	public static <T> List<T> jsonArrToList(String jsonArrStr, Class<T> clazz) {
		try {
			List<T> lst = new ArrayList<T>();
			JSONArray jsonObjArr = new JSONArray(jsonArrStr);
			for (int i = 0; i < jsonObjArr.length(); i++) {
				T entity = jsonObjToEntity(jsonObjArr.getJSONObject(i), clazz);
				lst.add(entity);
			}
			return lst;
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}

	/**
	 * 将json字符串转换为List集合
	 * 
	 * @param jsonArrStr
	 * @return
	 */
	public static List<Map<String, Object>> jsonObjList(String jsonArrStr) {
		List<Map<String, Object>> jsonList = new ArrayList<Map<String, Object>>();
		JSONArray jsonArr = null;
		try {
			jsonArr = new JSONArray(jsonArrStr);
			jsonList = (List<Map<String, Object>>) JSONHelper
					.jsonToList(jsonArr);
		} catch (JSONException e) {
			System.out.println("Json字符串转换异常!");
			e.printStackTrace();
		}
		return jsonList;
	}

	/**
	 * 将json对象的键值存放在集合,映射table的column
	 * 
	 * @param map
	 * @return
	 */
	public static List<String> jsonMapKeysList(Map<?, ?> map) {
		List<String> jsonjsonList = new ArrayList<String>();
		String columnStr = "column";
		for (int i = 0; i < map.keySet().size(); i++) {
			jsonjsonList.add(columnStr + (i + 1));
		}
		System.out.println(jsonjsonList.size());
		return jsonjsonList;
	}

	/**
	 * 将传递进来的json数组转换为List集合
	 * 
	 * @param jsonArr
	 * @return
	 * @throws JSONException
	 */
	private static List<?> jsonToList(JSONArray jsonArr) throws JSONException {
		List<Object> jsonToMapList = new ArrayList<Object>();
		for (int i = 0; i < jsonArr.length(); i++) {
			Object object = jsonArr.get(i);
			if (object instanceof JSONArray) {
				jsonToMapList.add(JSONHelper.jsonToList((JSONArray) object));
			} else if (object instanceof JSONObject) {
				jsonToMapList.add(JSONHelper.jsonToMap((JSONObject) object));
			} else {
				jsonToMapList.add(object);
			}
		}
		return jsonToMapList;
	}

	/**
	 * 将传递进来的json对象转换为Map集合
	 * 
	 * @param jsonObj
	 * @return
	 * @throws JSONException
	 */
	@SuppressWarnings("unchecked")
	private static Map<String, Object> jsonToMap(JSONObject jsonObj)
			throws JSONException {
		Map<String, Object> jsonMap = new HashMap<String, Object>();
		Iterator<String> jsonKeys = jsonObj.keys();
		while (jsonKeys.hasNext()) {
			String jsonKey = jsonKeys.next();
			Object jsonValObj = jsonObj.get(jsonKey);
			if (jsonValObj instanceof JSONArray) {
				jsonMap.put(jsonKey,
						JSONHelper.jsonToList((JSONArray) jsonValObj));
			} else if (jsonValObj instanceof JSONObject) {
				jsonMap.put(jsonKey,
						JSONHelper.jsonToMap((JSONObject) jsonValObj));
			} else {
				jsonMap.put(jsonKey, jsonValObj);
			}
		}
		return jsonMap;
	}
}
 类似资料: