Я использую 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.
Там 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