1、概述
- 目的:对多层json排序,按字母的升序排序。
- 实现方案:利用java中的TreeMap排序特性进行排序。
2、工具类
package com.ybw.util;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import java.util.Map;
import java.util.TreeMap;
/**
* @author ybw
* @version V1.0
* @className JsonUtils
* @date 2024/7/11
**/
public class JsonUtils {
/**
* json排序
*/
public static String sortJson(Object obj) {
//1、判断对象是否为空
if (obj == null) {
return null;
}
//2、将对象转换为JSON对象
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(obj));
//3、排序
Map<String, Object> sortedJsonObject = sortJsonObject(jsonObject);
//4、返回排序后的JSON字符串
return JSON.toJSONString(sortedJsonObject);
}
/**
* 排序JsonObject
*
* @param jsonObject
* @methodName: sortJsonObject
* @return: java.util.Map<java.lang.String, java.lang.Object>
* @author: ybw
* @date: 2024/7/11
**/
private static Map<String, Object> sortJsonObject(JSONObject jsonObject) {
//1、判断对象是否为空
if (jsonObject == null) {
return null;
}
//2、创建一个TreeMap对象,用于存储排序后的键值对
Map<String, Object> sortedJsonObject = new TreeMap<>();
//3、遍历JSON对象,将键值对添加到TreeMap中,并排序
for (Map.Entry<String, Object> entry : new TreeMap<>(jsonObject).entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
//3.1 如果值是JSON对象,则递归调用,处理嵌套的JSON对象
if (value instanceof JSONObject) {
value = sortJsonObject((JSONObject) value);
}
//3.2 将键值对添加到TreeMap中
sortedJsonObject.put(key, value);
}
return sortedJsonObject;
}
}
3、测试
package com.ybw.util;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
@Slf4j
class JsonUtilsTest {
@Test
void sortJson() {
String jsonStr = "{\"name\":\"John\",\"age\":25,\"address\":{\"street\":\"Main St\",\"city\":\"New York\"}}";
String sortedJson = JsonUtils.sortJson(jsonStr);
log.info("json:{}", sortedJson);
}
}
打印结果:
{
"address": {
"city": "New York",
"street": "Main St"
},
"age": 25,
"name": "John"
}
文章评论