highlight: arduino-light
```java package com.yl.box.util;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.parser.Feature;
import java.util.*;
public class JsonUtils {
/**
* 应用场景:Json 排序
*
* @param jsonStr JSON字符串
*/
public static Map<String, Object> jsonToMap(String jsonStr) {
Map<String, Object> treeMap = new TreeMap();
//
JSONObject json = JSONObject.parseObject(jsonStr, Feature.OrderedField);
Iterator<String> keys = json.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
Object value = json.get(key);
//判断传入kay-value中是否含有"" 或null
if (json.get(key) == null || value == null) {
//当JSON字符串存在null时,不将该kay-value放入Map中,即显示的结果不包括该kay-value
continue;
}
// 判断是否为JSONArray(json数组)
if (value instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) value;
List<Object> arrayList = new ArrayList<>();
for (Object object : jsonArray) {
// 判断是否为JSONObject,如果是 转化成TreeMap
if (object instanceof JSONObject) {
object = jsonToMap(object.toString());
}
arrayList.add(object);
}
treeMap.put(key, arrayList);
} else {
//判断该JSON中是否嵌套JSON
boolean flag = isJSONValid(value.toString());
if (flag) {
//若嵌套json了,通过递归再对嵌套的json(即子json)进行排序
value = jsonToMap(value.toString());
}
// 其他基础类型直接放入treeMap
// JSONObject可进行再次解析转换
treeMap.put(key, value);
}
}
return treeMap;
}
/**
* 校验是否是json字符串
*/
public final static boolean isJSONValid(String json) {
try {
if (null == JSONObject.parseObject(json)) {
return false;
}
} catch (Exception ex) {
return false;
}
return true;
}
} ```