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