简体   繁体   中英

parse recursively unknown json input structure in java

I'm trying to parse recursively unknown json input structure in java like the format below and trying to rewrite the same structure in another json.

Meanwhile I need to validate each & every json key/values while parsing.

{"Verbs":[{
    "aaaa":"30d", "type":"ed", "rel":1.0, "id":"80", "spoken":"en", "ct":"on", "sps":null
},{
    "aaaa":"31", "type":"cc", "rel":3.0, "id":"10", "spoken":"en", "ct":"off", "sps":null
},{
    "aaaa":"81", "type":"nn", "rel":3.0, "id":"60", "spoken":"en", "ct":"on", "sps":null
}]}

Please advice which json parser I can use for reading and writing unknown json content.

This way you can recursively parse JSON object:

import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;

public class JsonQuestion {

    public static void main(String[] args) {
        String input =  "{\"Verbs\":[{\n" +
                "    \"aaaa\":\"30d\", \"type\":\"ed\", \"rel\":1.0, \"id\":\"80\", \"spoken\":\"en\", \"ct\":\"on\", \"sps\":null\n" +
                "},{\n" +
                "    \"aaaa\":\"31\", \"type\":\"cc\", \"rel\":3.0, \"id\":\"10\", \"spoken\":\"en\", \"ct\":\"off\", \"sps\":null\n" +
                "},{\n" +
                "    \"aaaa\":\"81\", \"type\":\"nn\", \"rel\":3.0, \"id\":\"60\", \"spoken\":\"en\", \"ct\":\"on\", \"sps\":null\n" +
                "}]}";

        JsonObject jsonObject = JsonObject.readFrom(input);
        handleObject(jsonObject);
    }

    private static void handleValue(JsonObject.Member member, JsonValue value) {
        if (value.isArray()) {
            if (member != null) {
                System.out.print("name = " + member.getName());
            }
            System.out.println("array value ");
            recurseArray(value.asArray());
        } else if (value.isBoolean()) {
            if (member != null) {
                System.out.print("name = " + member.getName());
            }
            System.out.println(", boolean value = " + value.asBoolean());
        } else if (value.isNull()) {
            if (member != null) {
                System.out.print("name = " + member.getName());
            }
            System.out.println(", null value");
        } else if (value.isNumber()) {
            if (member != null) {
                System.out.print("name = " + member.getName());
            }
            System.out.println(", number value = " + value.asDouble());
        } else if (value.isObject()) {
            if (member != null) {
                System.out.print("name = " + member.getName());
            }
            System.out.println(", object value ");
            handleObject(value.asObject());
        } else if (value.isString()) {
            if (member != null) {
                System.out.print("name = " + member.getName());
            }
            System.out.println(", string value = " + value.asString());
        }
    }

    private static void handleObject(JsonObject object) {
        for (JsonObject.Member next : object) {
            JsonValue value = next.getValue();
            handleValue(next, value);
        }
    }

    private static void recurseArray(JsonArray array) {
        for (JsonValue value : array) {
            handleValue(null, value);
        }
    }
}

Using gson library https://sites.google.com/site/gson/gson-user-guide

public void parseJson() {
     String jsonStr = "";//input json String.
     JsonParser parser = new JsonParser();
     JsonElement jsonElement = parser.parse(jsonStr);
     processJsonElement(jsonElement);
}


private void processJsonElement(JsonElement e) {
    if (e.isJsonArray()) {
        processJsonArray(e.getAsJsonArray());
    } else if (e.isJsonNull()) {
        processJsonNull(e.getAsJsonNull());
    } else if (e.isJsonObject()) {
        processJsonObject(e.getAsJsonObject());
    } else if (e.isJsonPrimitive()) {
        processJsonPrimitive(e.getAsJsonPrimitive());
    }
}

private void processJsonArray(JsonArray a) {
    for (JsonElement e : a) {
        processJsonElement(e);
    }
}

private void processJsonNull(JsonNull n) {
    System.out.println("null || : " + n);
}

private void processJsonObject(JsonObject o) {
    Set<Map.Entry<String, JsonElement>> members= o.entrySet();
    for (Map.Entry<String, JsonElement> e : members) {
        System.out.println("Processing object member: " + e.getKey());
        processJsonElement(e.getValue());
    }
}

private void processJsonPrimitive(JsonPrimitive p) {
    System.out.println("Primitive || :" + p);
}

Or Jackson

public void processJson() {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        JsonNode node = objectMapper.readTree(jsonStr);
        System.out.println(node);
        processNode(node);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }

}

private void processNode(JsonNode n) {
    if (n.isContainerNode()) {
        processJsonContainer(n.iterator());
    } else if (n.isNull()) {
        System.out.println("Null || :" + n);
    } else if (n.isNumber()) {
        System.out.println("Number || :" + n.asDouble());
    } else if (n.isBoolean()) {
        System.out.println("Boolean || :" + n.asBoolean());
    } else if (n.isTextual()) {
        System.out.println("Text || :" + n.asText());
    }
}

private void processJsonContainer(Iterator<JsonNode> iterator) {
   while (iterator.hasNext()) {
       processNode(iterator.next());
   }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM