Начиная с версии 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/”