使用fastjson解析复杂嵌套json的工具类
目的
json字符串对象如果嵌套层次比较多,且只是想知道json中是否存在我所需要的key的话,就不需要定义类去映射,可以通过直接解析json查找里面的key。
依赖
<!--JSON解析-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.23</version>
</dependency>
实现:JsonUtil
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
import java.util.Objects;
public class JsonUtil {
public static boolean isJSONObj(Object json) {
return json instanceof JSONObject;
}
public static boolean isJSONArray(Object json) {
return json instanceof JSONArray;
}
public static void getJSONValue(JSONObject json, String k, List<String> list) {
if (Objects.equals(k, "")) {
return;
}
for (Object key : json.keySet()) {
if (key.equals(k) || key == k) {
//是字符串
list.add(json.get(key).toString());
} else if (isJSONObj(json.get(key))) {
//是对象
JSONObject j2 = JSON.parseObject(json.get(key).toString());
getJSONValue(j2, k, list);
} else if (isJSONArray(json.get(key))) {
JSONArray j3 = JSON.parseArray(json.get(key).toString());
//是数组
getJSONValue(j3, k, list);
}
}
}
public static void getJSONValue(JSONArray json, String k, List<String> list) {
if (Objects.equals(k, "")) {
return;
}
for (Object j : json) {
if (isJSONObj(j)) {
//是对象
JSONObject j2 = JSON.parseObject(j.toString());
getJSONValue(j2, k, list);
} else if (isJSONArray(j)) {
//是数组
JSONArray j3 = JSON.parseArray(j.toString());
getJSONValue(j3, k, list);
}
}
}
}
注意!
json对象非常非常大的情况下,此工具类可能会导致栈溢出,毕竟是递归。