使用fastjson解析复杂嵌套json的工具类

使用fastjson解析复杂嵌套json的工具类

柳性安 1,108 2023-04-29

使用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对象非常非常大的情况下,此工具类可能会导致栈溢出,毕竟是递归。