JSON处理工具类

import org.json.JSONArray;
import org.json.JSONObject;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * JSON处理工具类
 */
public class JsonUtils {
 
    /**
     **将json字符串转为map
     * @param json
     * @return java.util.Map<java.lang.String, java.lang.Object>
     **/
    public static Map<String, Object> jsonToMap(String json) {
        if (StringUtils.isBlank(json)){
            return null;
        }
 
        ObjectMapper objectMapper = new ObjectMapper();
 
        Map<String, Object> map = null;
        try {
            map = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
 
        return map;
    }
 
    /**
     **json格式字符串转换为List<Map<String, Object>>
     * @param json
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
     * @author yinqi
     * @create 2024/2/1 9:36
     **/
    public static List<Map<String, Object>> jsonToList(String json) {
        if (StringUtils.isBlank(json)){
            return null;
        }
 
        ObjectMapper objectMapper = new ObjectMapper();
        List<Map<String, Object>> list = null;
        try {
            list = objectMapper.readValue(json, new TypeReference<List<Map<String, Object>>>() {
            });
        } catch (JsonProcessingException e) {
            System.err.println(e.getMessage());
        }
        return list;
    }
 
    /**
     * 将JSON字符串转换为JSONObject对象
     *
     * @param json JSON字符串
     * @return 转换后的JSONObject对象
     */
    public static JSONObject stringToJson(String json) {
        return new JSONObject(json);
    }
 
    /**
     * 将JSONObject对象转换为JSON字符串
     *
     * @param jsonObject JSONObject对象
     * @return 转换后的JSON字符串
     */
    public static String jsonToString(JSONObject jsonObject) {
        return jsonObject.toString();
    }
 
    /**
     * 获取JSONObject中指定字段的字符串值
     *
     * @param jsonObject JSONObject对象
     * @param key        字段名
     * @return 字段对应的字符串值,若字段不存在则返回空字符串
     */
    public static String getString(JSONObject jsonObject, String key) {
        return jsonObject.optString(key, "");
    }
 
    /**
     * 获取JSONObject中指定字段的整数值
     *
     * @param jsonObject JSONObject对象
     * @param key        字段名
     * @return 字段对应的整数值,若字段不存在或无法转换为整数时返回0
     */
    public static int getInt(JSONObject jsonObject, String key) {
        return jsonObject.optInt(key, 0);
    }
 
    /**
     * 获取JSONObject中指定字段的布尔值
     *
     * @param jsonObject JSONObject对象
     * @param key        字段名
     * @return 字段对应的布尔值,若字段不存在或无法转换为布尔值时返回false
     */
    public static boolean getBoolean(JSONObject jsonObject, String key) {
        return jsonObject.optBoolean(key, false);
    }
 
    /**
     * 获取JSONObject中指定字段的JSONObject对象
     *
     * @param jsonObject JSONObject对象
     * @param key        字段名
     * @return 字段对应的JSONObject对象,若字段不存在或无法转换为JSONObject对象时返回null
     */
    public static JSONObject getJSONObject(JSONObject jsonObject, String key) {
        return jsonObject.optJSONObject(key);
    }
 
    /**
     * 获取JSONObject中指定字段的JSONArray对象
     *
     * @param jsonObject JSONObject对象
     * @param key        字段名
     * @return 字段对应的JSONArray对象,若字段不存在或无法转换为JSONArray对象时返回null
     */
    public static JSONArray getJSONArray(JSONObject jsonObject, String key) {
        return jsonObject.optJSONArray(key);
    }
 
    /**
     * 将对象转换为JSONObject对象
     *
     * @param obj 对象
     * @return 转换后的JSONObject对象
     */
    public static JSONObject objectToJson(Object obj) {
        return new JSONObject(obj);
    }
 
    /**
     * 将JSON字符串转换为JSONArray对象
     *
     * @param json JSON字符串
     * @return 转换后的JSONArray对象,若转换失败则返回null
     */
    public static JSONArray stringToJsonArray(String json) {
        try {
            return new JSONArray(json);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
 
    /**
     * 将JSONArray对象转换为JSON字符串
     *
     * @param jsonArray JSONArray对象
     * @return 转换后的JSON字符串
     */
    public static String jsonArrayToString(JSONArray jsonArray) {
        return jsonArray.toString();
    }
 
    /**
     * 将JSONArray对象转换为指定类型的List集合
     *
     * @param jsonArray JSONArray对象
     * @param clazz     List集合的元素类型
     * @return 转换后的List集合
     */
    public static <T> List<T> jsonArrayToList(JSONArray jsonArray, Class<T> clazz) {
        List<T> list = new ArrayList<>();
        for (int i = 0; i < jsonArray.length(); i++) {
            T item = null;
            try {
                item = clazz.newInstance();
                if (item instanceof JSONObject) {
                    list.add((T) jsonArray.getJSONObject(i));
                } else {
                    list.add((T) jsonArray.get(i));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return list;
    }
 
    /**
     * 将List集合转换为JSONArray对象
     *
     * @param list List集合
     * @return 转换后的JSONArray对象
     */
    public static JSONArray listToJsonArray(List<?> list) {
        JSONArray jsonArray = new JSONArray();
        for (Object obj : list) {
            jsonArray.put(objectToJson(obj));
        }
        return jsonArray;
    }
 
        /**
     **将json字符串转换为对象集合
     * @param jsonString
     * @param valueType
     * @return java.util.List<T>
     **/
    public static <T> List<T> jsonToList(String jsonString, Class<T> valueType) throws IOException {
        if (StringUtils.isBlank(jsonString)){
            return null;
        }
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.readValue(jsonString, objectMapper.getTypeFactory().constructCollectionType(List.class, valueType));
    }
 
    /**
     **将json字符串中的旧字符串替换成新字符串
     * @param jsonString json字符串
     * @param oldString 旧字符串
     * @param newString 新字符串
     * @return java.lang.String
     **/
    public static String replaceStringInJson(String jsonString, String oldString, String newString) {
        try {
            // 将json字符串转换为JSONObject对象
            JSONObject json = new JSONObject(jsonString);
 
            // 使用递归函数进行替换
            replaceStringInJson(json, oldString, newString);
 
            // 返回更新后的json字符串
            return json.toString();
        } catch (JSONException e) {
            e.printStackTrace();
        }
 
        // 如果发生异常,则返回原始的json字符串
        return jsonString;
    }
 
    /**
     **将json对象中的旧字符串替换成新字符串
     * @param object JSONObject或JSONArray
     * @param oldString 旧字符串
     * @param newString 新字符串
     * @return void
     **/
    public static void replaceStringInJson(Object object, String oldString, String newString) {
        if (object instanceof JSONObject) {
            JSONObject json = (JSONObject) object;
            // 遍历JSONObject的所有键
            for (String key : json.keySet()) {
                Object value = json.get(key);
                // 如果键对应的值是字符串类型,则尝试替换旧字符串为新字符串
                if (value instanceof String) {
                    String oldValue = (String) value;
                    String newValue = oldValue.replaceAll(oldString, newString);
                    // 更新键对应的值为新字符串
                    json.putOpt(key, newValue);
                }else {
                    replaceStringInJson(value, oldString, newString);
                }
            }
        } else if (object instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) object;
            for (int i = 0; i < jsonArray.size(); i++) {
                Object value = jsonArray.get(i);
                replaceStringInJson(value, oldString, newString);
            }
        }
    }
}