For situations where performance is most critical, Jackson comes with Streaming API which is a high performance, sequential access api, with very low memory footprints and processing overhead.
Due to it’s incremental processing/sequential access nature, all content must be read/write in order as it arrives, so it’s bit hard to use. This API is mainly used by middle-ware and frameworks internally. On application level, to remain simple, usually data-binding or tree-model api’s are preferred(which in fact uses the Streaming API internally for JSON reading/writing).
On reading front, API comes with Parsers
which works like a pointer moving through individual tokens in JSON string and provide access to data of those tokens.
key, value, brackets [ { } ]
are all tokens.
On writing front, Generators
are available which writes JSON content. They provide methods to write individual tokens.
Let’s see how it is used exactly:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.websystique.xml</groupId> <artifactId>JsonJacksonStreamingExample</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>JsonJacksonStreamingExample</name> <dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version> </dependency> </dependencies> </project>
package com.websystique.json.jackson; import java.io.File; import java.io.IOException; import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; public class JsonJacksonStreamingExample { public static void main(String args[]) throws JsonParseException, JsonMappingException, IOException{ JsonFactory factory = new JsonFactory(); /** * Write values in JSON format to a file */ JsonGenerator generator = factory.createGenerator(new File("result.json"), JsonEncoding.UTF8); generator.writeStartObject(); // write opening brace "{" generator.writeStringField("car", "Bentley"); //write key:value pair "car":"bentley" generator.writeNumberField("model", 2010); generator.writeNumberField("price", 98.700); generator.writeFieldName("colors"); generator.writeStartArray(); //write array opening brace "[" generator.writeString("gray"); //write individual array item generator.writeString("white"); generator.writeString("black"); generator.writeEndArray(); //write array closing brace "]" generator.writeEndObject(); // write closing brace "}" generator.close(); } }
Below is the output(result.json content)
{"car":"Bentley","model":2010,"price":98.7,"colors":["gray","white","black"]}
package com.websystique.json.jackson; import java.io.File; import java.io.IOException; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.JsonMappingException; public class JsonJacksonStreamingExample { public static void main(String args[]) throws JsonParseException, JsonMappingException, IOException{ JsonFactory factory = new JsonFactory(); /** * Read values in json format */ JsonParser parser = factory.createParser(new File("result.json")); parser.nextToken(); //start reading the file while (parser.nextToken() != JsonToken.END_OBJECT) { //loop until "}" String fieldName = parser.getCurrentName(); if (fieldName.equals("car")) { parser.nextToken(); System.out.println("car : " + parser.getText()); } else if (fieldName.equals("model")) { parser.nextToken(); System.out.println("model : " + parser.getIntValue()); } else if (fieldName.equals("price")) { parser.nextToken(); System.out.println("price : " + parser.getFloatValue()); } else if (fieldName.equals("colors")) { parser.nextToken(); while (parser.nextToken() != JsonToken.END_ARRAY){ //loop until "]" System.out.println(parser.getText()); } } else { // unexpected token, generate error throw new IOException("Unrecognized field '"+fieldName+"'"); } } parser.close(); } }
Below is the output
car : Bentley model : 2010 price : 98.7 gray white black
That’s it. In the next post we will learn about frequently used Jackson Json annotations.
References
If you like tutorials on this site, why not take a step further and connect me on Facebook , Google Plus & Twitter as well? I would love to hear your thoughts on these articles, it will help improve further our learning process.
In this post we will be developing a full-blown CRUD application using Spring Boot, AngularJS, Spring Data, JPA/Hibernate and MySQL,…
Spring Boot complements Spring REST support by providing default dependencies/converters out of the box. Writing RESTful services in Spring Boot…
Being able to start the application as standalone jar is great, but sometimes it might not be possible to run…
Spring framework has taken the software development industry by storm. Dependency Injection, rock solid MVC framework, Transaction management, messaging support,…
Let's secure our Spring REST API using OAuth2 this time, a simple guide showing what is required to secure a…
This post shows how an AngularJS application can consume a REST API which is secured with Basic authentication using Spring…