Инкрементная потоковая библиотека JSON для Java - PullRequest
5 голосов
/ 05 июня 2011

Может ли кто-нибудь порекомендовать библиотеку JSON для Java, которая позволяет мне передавать данные по мере их поступления неблокирующим образом? Я прочитал улучшенную библиотеку Java JSON и похожие вопросы и не нашел именно то, что мне хотелось бы.

По сути, мне нужна библиотека, которая позволяет мне делать что-то вроде следующего:

String jsonString1 = "{ \"A broken";
String jsonString2 = " json object\" : true }";

JSONParser p = new JSONParser(...);
p.parse(jsonString1);
p.isComplete(); // returns false
p.parse(jsonString2);
p.isComplete(); // returns true
Object o = p.getResult();

Обратите внимание, что фактическое имя ключа («сломанный объект json») разбито на части.

Самое близкое, что я нашел, это async-json-library , которая делает почти именно то, что я хотел бы, за исключением того, что она не может восстановить объекты, где есть реальные строки или другие значения данных разделены на части.

Ответы [ 3 ]

2 голосов
/ 25 июня 2011

Существует несколько блокирующих потоковый / incemental JSON-анализаторы (согласно Есть ли потоковый API для JSON? ); но для асинхронного ничего еще, что я знаю. Библиотека, на которую вы ссылаетесь, кажется плохо названной; похоже, что он не выполняет настоящую асинхронную обработку, а просто позволяет анализировать последовательность документов JSON (что позволяют делать и несколько других библиотек)

Если бы были люди, которые действительно этого хотели, написать это не невозможно - для XML есть Aalto , а обработка JSON немного проще, чем XML. Для чего бы это ни стоило, на самом деле этот запрос функции добавляет неблокирующий режим анализа для Jackson ; но очень немногие пользователи проявили интерес к выполнению этого (путем голосования за запрос функции).

РЕДАКТИРОВАТЬ: (2016-01), хотя не асинхронный, Jackson ObjectMapper допускает удобное поддерево с помощью привязки поддерева для частей потока - см. ObjectReader.readValues() (ObjectReader создан из ObjectMapper) или укороченные версии ObjectMapper.readValues(...). Обратите внимание на конечный s, который подразумевает поток Объектов, а не только один.

0 голосов
/ 05 августа 2013

Я написал такой парсер: JsonParser.java .Посмотрите примеры, как его использовать: JsonParserTest.java .

0 голосов
/ 16 декабря 2012

Google Gson может постепенно анализировать Json из InputStream https://sites.google.com/site/gson/streaming

...