wandermonk
wandermonk

Reputation: 7356

Query JSON String using Jackson API with good performance

I am working on a use case where I need to parse different JSON strings and query for specific fields basing on the "type" of the JSON. The "type" is a field in the JSON string.

I am using Jackson API to perform this task after going through the blogs and benchmarks, as it is the fastest.

I am able to parse the JSON and achieve what I want but the issue is with the performance.

public String generate(String inputJson, List<String> idParams,final String seperator) throws Exception {
        JsonNode node;
        StringBuilder sb = new StringBuilder();
        try {
            node = new ObjectMapper().readTree(new StringReader(inputJson));
            idParams.forEach(e -> {
                String value = node.findValue(e).asText();
                sb.append(value).append(seperator);
            });
        } catch (Exception e) {
            throw e;
        }

        return sb.toString();
    }

In the above method, I am getting the field details as a List. With the help of forEach(), i am able to fetch the values by finding using the fields.

The culprit is the list iterator as I have to search the whole json tree to find the value for each element. Is there a better approach to optimize. I would also like to get the inputs on other JSON parsing libraries which can improve the performance here.

I am also thinking of parsing the whole json once and writing the Keys and Values to a HashMap. But, I have very few fields which i really care about the remaining fields are not needed.

Upvotes: 1

Views: 4111

Answers (2)

Sashi
Sashi

Reputation: 2425

Consider using Jackson Streaming API -

https://github.com/FasterXML/jackson-docs/wiki/JacksonStreamingApi

Take a look at this example - http://www.baeldung.com/jackson-streaming-api

Upvotes: 0

Sharon Ben Asher
Sharon Ben Asher

Reputation: 14348

take a look at JsonPath . It offers xpath-like rich query language that allows for search and retrieval of individual or few elements from the JSON tree.

Upvotes: 1

Related Questions