Jackson Streaming API pour lire et écrire JSON

Jackson - Exemples de modèles de streaming

Ce tutoriel de Jackson vous montre comment utiliserJsonGenerator pour écrire une chaîne JSON et un tableau JSON dans un fichier, en outre, le lire avecJsonParser

API Jackson Streaming

  • JsonGenerator - Ecrire JSON

  • +JsonParser + - Analyser JSON

Note
Le mode de flux Jackson est le modèle de traitement sous-jacent sur lequeldata-binding etTree Model s'appuient tous les deux. C'est la meilleure performance et le meilleur contrôle sur l'analyse JSON et la génération JSON.

Testé avec Jackson 2.9.8

1. JsonGenerator - Ecrire JSON

1.1 Write JSON to a file.

JacksonExample1.java

package com.example;

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;

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

public class JacksonExample1 {

    public static void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();

        try (JsonGenerator jGenerator =
                     mapper.getFactory().createGenerator(
                             new File("c:\\projects\\user.json")
                             , JsonEncoding.UTF8)) {

            jGenerator.writeStartObject();                                  // {

            jGenerator.writeStringField("name", "example");                  // "name" : "example"
            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();
        }

    }
}

Sortie

c:\projects\user.json

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

2. JsonGenerator - Ecrire un tableau JSON

2.1 1.1 Write JSON array to a file.

JacksonExample2.java

package com.example;

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;

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

public class JacksonExample2 {

    public static void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();

        try (JsonGenerator jGenerator =
                     mapper.getFactory().createGenerator(
                             new File("c:\\projects\\user2.json")
                             , JsonEncoding.UTF8)) {

            // pretty print
            jGenerator.useDefaultPrettyPrinter();

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

            jGenerator.writeStartObject();                                  // {

            jGenerator.writeStringField("name", "example");                  // "name" : "example"
            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();
        }

    }
}

Sortie

c:\projects\user2.json

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

3. JsonParser - Lire JSON

Token
En mode de streaming Jackson, il divise la chaîne JSON en une liste de jetons, et chaque jeton sera traité de manière incrémentielle. Par exemple,

{
   "name":"example"
}
  • Jeton 1 = \ {

  • Jeton 2 = nom

  • Jeton 3 = exemple

  • Jeton 4 =}

3.1 JsonParser example to parse a JSON file.

c:\projects\user.json

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

JacksonExample3.java

package com.example;

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;

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

public class JacksonExample3 {

    public static void main(String[] args) {

        try (JsonParser jParser = new JsonFactory()
                .createParser(new File("c:\\projects\\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();
        }

    }

}

Sortie

example
38
msg 1
msg 2
msg 3

4. JsonParser - Lire le tableau JSON

4.1 JsonParser example to parse a JSON array file.

c:\projects\user2.json

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

JacksonExample4.java

package com.example;

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;

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

public class JacksonExample4 {

    public static void main(String[] args) {

        try (JsonParser jParser = new JsonFactory()
                .createParser(new File("c:\\projects\\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();
        }

    }

}

Sortie

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

Note
Plus deJackson examples