Эффективная работа с потоками JSON (на Java)

1

Я использую JSONObject и JSONReader, но в идеале я ищу гибрид :)

В частности, с учетом потока объектов JSON, являющихся частью произвольно длинного массива JSON, есть вспомогательный/библиотечный модуль, который одновременно дает "JSONObject", стиль итератора, вместо того, чтобы читать все или обрабатывать отдельные примитивные поля (JsonReader )?

Пример гипотетического API:

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));

reader.beginArray();
while (reader.hasNext()) 
{
  JSONObject obj = reader.readObject();
  // do something with 'obj'
}
reader.endArray();

Выше, вызов readObject анализирует некоторое сложное поддерево JSON и возвращает его как JSONObject.

  • 1
    Непригодный. JSONArray может быть слишком большим для одновременного хранения в памяти. Я хочу читать массив любой длины с помощью JSONObject-at-a-time. В идеале API должен блокировать readObject до тех пор, пока не будет возвращен JSONObject-элемент массива.
Показать ещё 3 комментария
Теги:

1 ответ

3

Там javax.json.JSONParser
Пример, который выводит json:

import javax.json.Json;
import javax.json.stream.JsonParser;
...
JsonParser parser = Json.createParser(new StringReader(jsonData));
while (parser.hasNext()) {
   JsonParser.Event event = parser.next();
   switch(event) {
      case START_ARRAY:
      case END_ARRAY:
      case START_OBJECT:
      case END_OBJECT:
      case VALUE_FALSE:
      case VALUE_NULL:
      case VALUE_TRUE:
         System.out.println(event.toString());
         break;
      case KEY_NAME:
         System.out.print(event.toString() + " " +
                          parser.getString() + " - ");
         break;
      case VALUE_STRING:
      case VALUE_NUMBER:
         System.out.println(event.toString() + " " +
                            parser.getString());
         break;
   }
}

от http://docs.oracle.com/javaee/7/tutorial/doc/jsonp004.htm#BABDBHIA
Это часть JavaEE7 api, но автономная банка может быть получена из https://jsonp.java.net/download.html

  • 0
    ссылка на документы мертва

Ещё вопросы

Сообщество Overcoder
Наверх
Меню