Search in sources :

Example 1 with ArrayType

use of entity.ArrayType in project CodeUtils by boredream.

the class JsonUtils method recursionJson.

/**
     * 递归获取json数据
     *
     * @param jo     当前递归解析的json对象
     * @param parent 已经解析好的上一级数据,无上一级时传入null
     */
private static void recursionJson(JsonObject jo, Json2JavaElement parent) {
    if (jo == null) {
        return;
    }
    // 循环整个json对象的键值对
    for (Entry<String, JsonElement> entry : jo.entrySet()) {
        // json对象的键值对建构为 {"key":value}
        // 其中,值可能是基础类型,也可能是集合或者对象,先解析为json元素
        String name = entry.getKey();
        JsonElement je = entry.getValue();
        Json2JavaElement j2j = new Json2JavaElement();
        j2j.setName(name);
        if (parent != null) {
            j2j.setParentJb(parent);
        }
        // 获取json元素的类型,可能为多种情况,如下
        Class<?> type = getJsonType(je);
        if (type == null) {
            // 自定义类型
            // json键值的首字母转为大写,作为自定义类名
            j2j.setCustomClassName(StringUtils.firstToUpperCase(name));
            // ?
            j2j.setSouceJo(je.getAsJsonObject());
            jsonBeans.add(j2j);
            // 自定义类需要继续递归,解析自定义类中的json结构
            recursionJson(je.getAsJsonObject(), j2j);
        } else if (type.equals(JsonArray.class)) {
            // 集合类型
            // 重置集合数据,并获取当前json元素的集合类型信息
            deepLevel = 0;
            arrayType = new ArrayType();
            getJsonArrayType(je.getAsJsonArray());
            j2j.setArray(true);
            j2j.setArrayDeep(deepLevel);
            if (arrayType.getJo() != null) {
                j2j.setCustomClassName(StringUtils.firstToUpperCase(name));
                // 集合内的末点元素类型为自定义类, 递归
                recursionJson(arrayType.getJo(), j2j);
            } else {
                j2j.setType(arrayType.getType());
            }
            jsonBeans.add(j2j);
        } else {
            // 其他情况,一般都是String,int等基础数据类型
            j2j.setType(type);
            jsonBeans.add(j2j);
        }
    }
}
Also used : JsonArray(com.google.gson.JsonArray) ArrayType(entity.ArrayType) JsonElement(com.google.gson.JsonElement) Json2JavaElement(entity.Json2JavaElement)

Aggregations

JsonArray (com.google.gson.JsonArray)1 JsonElement (com.google.gson.JsonElement)1 ArrayType (entity.ArrayType)1 Json2JavaElement (entity.Json2JavaElement)1