This Jackson tutorial show you how to use JsonGenerator to write JSON string and JSON array into a file, furthermore, read it with JsonParser

Jackson Streaming APIs

  • JsonGenerator – Write JSON
  • JsonParser – Parse JSON

Note

The Jackson streaming mode is the underlying processing model that data-binding and Tree Model both build upon. It is the best performance and control over the JSON parsing and JSON generation.

Tested with Jackson 2.9.8

1. JsonGenerator – Write JSON

1.1 Write JSON to a file.

JacksonExample1.java

package com.favtuts.json;

import java.io.File;
import java.io.IOException;

import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonStreamingModelExamples {

    public static void main(String[] args) {
        writeJsonToFile();
    }

    static void writeJsonToFile() {

        ObjectMapper mapper = new ObjectMapper();
        try (JsonGenerator jGenerator = mapper.getFactory()
                .createGenerator(new File("/home/tvt/workspace/favtuts/user.json"),
                        JsonEncoding.UTF8)) {

            jGenerator.writeStartObject(); // {

            jGenerator.writeStringField("name", "favtuts"); // "name" : "favtuts"
            jGenerator.writeNumberField("age", 38); // "age" : 38

            jGenerator.writeFieldName("messages"); // "messages" :

            jGenerator.writeStartArray(); // [

            jGenerator.writeString("msg 1"); // "msg 1"
            jGenerator.writeString("msg 2"); // "msg 2"
            jGenerator.writeString("msg 3"); // "msg 3"

            jGenerator.writeEndArray(); // ]

            jGenerator.writeEndObject(); // }

        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Output

c:\\projects\\user.json

{"name":"favtuts","age":38,"messages":["msg 1","msg 2","msg 3"]}

2. JsonGenerator – Write JSON Array

2.1 1.1 Write JSON array to a file.

JacksonExample2.java

package com.favtuts.json;

import java.io.File;
import java.io.IOException;

import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonStreamingModelExamples {

    public static void main(String[] args) {
        // writeJSONToFile();
        writeJSONarrayToFile();
    }

    static void writeJSONarrayToFile() {
        ObjectMapper mapper = new ObjectMapper();

        try (JsonGenerator jGenerator = mapper.getFactory()
                .createGenerator(new File("/home/tvt/workspace/favtuts/user2.json"),
                        JsonEncoding.UTF8)) {

            // pretty print
            jGenerator.useDefaultPrettyPrinter();

            // start array
            jGenerator.writeStartArray(); // [

            jGenerator.writeStartObject(); // {

            jGenerator.writeStringField("name", "favtuts"); // "name" : "favtuts"
            jGenerator.writeNumberField("age", 38); // "age" : 38

            jGenerator.writeFieldName("messages"); // "messages" :

            jGenerator.writeStartArray(); // [

            jGenerator.writeString("msg 1"); // "msg 1"
            jGenerator.writeString("msg 2"); // "msg 2"
            jGenerator.writeString("msg 3"); // "msg 3"

            jGenerator.writeEndArray(); // ]

            jGenerator.writeEndObject(); // }

            // next object, pls

            jGenerator.writeStartObject(); // {

            jGenerator.writeStringField("name", "lap"); // "name" : "lap"
            jGenerator.writeNumberField("age", 5); // "age" : 5

            jGenerator.writeFieldName("messages"); // "messages" :

            jGenerator.writeStartArray(); // [

            jGenerator.writeString("msg a"); // "msg a"
            jGenerator.writeString("msg b"); // "msg b"
            jGenerator.writeString("msg c"); // "msg c"

            jGenerator.writeEndArray(); // ]

            jGenerator.writeEndObject(); // }

            jGenerator.writeEndArray(); // ]

        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Output

c:\\projects\\user2.json

[
    {
        "name": "favtuts",
        "age": 38,
        "messages": [
            "msg 1",
            "msg 2",
            "msg 3"
        ]
    },
    {
        "name": "lap",
        "age": 5,
        "messages": [
            "msg a",
            "msg b",
            "msg c"
        ]
    }
]

3. JsonParser – Read JSON

Token
In Jackson streaming mode, it splits JSON string into a list of tokens, and each token will be processed incremental. For example,

{
   "name":"favtuts"
}
  • Token 1 = {
  • Token 2 = name
  • Token 3 = favtuts
  • Token 4 = }

3.1 JsonParser example to parse a JSON file.

c:\\projects\\user.json

{"name":"favtuts","age":38,"messages":["msg 1","msg 2","msg 3"]}

JacksonExample3.java

package com.favtuts.json;

import java.io.File;
import java.io.IOException;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.JsonMappingException;

public class JacksonStreamingModelExamples {

    public static void main(String[] args) {
        readJSONfromFile();
    }

    static void readJSONfromFile() {
        try (JsonParser jParser = new JsonFactory()
                .createParser(new File("/home/tvt/workspace/favtuts/user.json"));) {

            // loop until token equal to "}"
            while (jParser.nextToken() != JsonToken.END_OBJECT) {

                String fieldname = jParser.getCurrentName();

                if ("name".equals(fieldname)) {
                    // current token is "name",
                    // move to next, which is "name"'s value
                    jParser.nextToken();
                    System.out.println(jParser.getText());
                }

                if ("age".equals(fieldname)) {
                    jParser.nextToken();
                    System.out.println(jParser.getIntValue());
                }

                if ("messages".equals(fieldname)) {

                    if (jParser.nextToken() == JsonToken.START_ARRAY) {
                        // messages is array, loop until token equal to "]"
                        while (jParser.nextToken() != JsonToken.END_ARRAY) {
                            System.out.println(jParser.getText());
                        }
                    }

                }

            }

        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Output

favtuts
38
msg 1
msg 2
msg 3

4. JsonParser – Read JSON Array

4.1 JsonParser example to parse a JSON array file.

c:\\projects\\user2.json

[
    {
        "name": "favtuts",
        "age": 38,
        "messages": [
            "msg 1",
            "msg 2",
            "msg 3"
        ]
    },
    {
        "name": "lap",
        "age": 5,
        "messages": [
            "msg a",
            "msg b",
            "msg c"
        ]
    }
]

JacksonExample4.java

package com.favtuts.json;

import java.io.File;
import java.io.IOException;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.JsonMappingException;

public class JacksonStreamingModelExamples {

    public static void main(String[] args) {
        readJSONarrayFromFile();
    }

    static void readJSONarrayFromFile() {
        try (JsonParser jParser = new JsonFactory()
            .createParser(new File("/home/tvt/workspace/favtuts/user2.json"));) {

            // JSON array?
            if (jParser.nextToken() == JsonToken.START_ARRAY) {

                while (jParser.nextToken() != JsonToken.END_ARRAY) {

                    // loop until token equal to "}"
                    while (jParser.nextToken() != JsonToken.END_OBJECT) {

                        String fieldname = jParser.getCurrentName();
                        if ("name".equals(fieldname)) {
                            // current token is "name",
                            // move to next, which is "name"'s value
                            jParser.nextToken();
                            System.out.println(jParser.getText());
                        }

                        if ("age".equals(fieldname)) {
                            jParser.nextToken();
                            System.out.println(jParser.getIntValue());
                        }

                        if ("messages".equals(fieldname)) {

                            // jParser.nextToken(); // current token is "[", move next
                            if (jParser.nextToken() == JsonToken.START_ARRAY) {
                                // messages is array, loop until token equal to "]"
                                while (jParser.nextToken() != JsonToken.END_ARRAY) {
                                    System.out.println(jParser.getText());
                                }
                            }

                        }

                    }

                }
            }

        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Output

favtuts
38
msg 1
msg 2
msg 3
lap
5
msg a
msg b
msg c

Note
More Jackson examples

Download Source Code

$ git clone https://github.com/favtuts/java-core-tutorials-examples

$ cd java-basic/json

References

Leave a Reply

Your email address will not be published. Required fields are marked *