Рубрики
Без рубрики

Gson – Чтение и запись JSON в виде потока

– Gson – Чтение и запись JSON в виде потока

Начиная с версии Gson 1.6, появились два новых класса JsonReader и JsonWriter введены для обеспечения потоковой обработки данных JSON. Прочтите это Потоковая документация Gson чтобы понять, в чем преимущества ее использования.

  • JsonWriter – Запись JSON в виде потока.
  • JsonReader – Считывать JSON в виде потока.

1. Автор JSON

package com.mkyong;

import com.google.gson.stream.JsonWriter;

import java.io.FileWriter;
import java.io.IOException;

public class GsonExample1 {

    public static void main(String[] args) {

        try (JsonWriter writer = new JsonWriter(new FileWriter("c:\\projects\\user.json"))) {

            writer.beginObject();                   // {
            writer.name("name").value("mkyong");    // "name" : "mkyong"
            writer.name("age").value(29);           // "age" : 29

            writer.name("messages");                // "messages" :
            writer.beginArray();                    // [
            writer.value("msg 1");                  // "msg 1"
            writer.value("msg 2");                  // "msg 2"
            writer.value("msg 3");                  // "msg 3"
            writer.endArray();                      // ]

            writer.endObject();                     // }

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

    }

}

Выход

{"name":"mkyong","age":29,"messages":["msg 1","msg 2","msg 3"]}

2. JsonReader-читатель

Токен В потоковом режиме все данные JSON рассматриваются как отдельный токен. Когда вы используете JsonReader для его обработки, каждый токен будет обрабатываться последовательно. Например,

{
	"url":"www.mkyong.com"
}
  • Токен 1 = {
  • Знак
  • Знак
  • Маркер 4 =}
package com.mkyong;

import com.google.gson.stream.JsonReader;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class GsonExample2 {

    public static void main(String[] args) {

        try (JsonReader reader = new JsonReader(new FileReader("c:\\projects\\user.json"))) {

            reader.beginObject();

            while (reader.hasNext()) {

                String name = reader.nextName();

                if (name.equals("name")) {

                    System.out.println(reader.nextString());

                } else if (name.equals("age")) {

                    System.out.println(reader.nextInt());

                } else if (name.equals("messages")) {

                    // read array
                    reader.beginArray();

                    while (reader.hasNext()) {
                        System.out.println(reader.nextString());
                    }

                    reader.endArray();

                } else {
                    reader.skipValue(); //avoid some unhandle events
                }
            }

            reader.endObject();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Выход

mkyong
29
msg 1
msg 2
msg 3

Рекомендации

Оригинал: “https://mkyong.com/java/gson-streaming-to-read-and-write-json/”