2014-02-15 5 views
0

У меня уже есть рабочий процесс, который использует JsonGenerator для записи JSON. Теперь мне нужно передать эти данные в другой процесс, который ожидает ввода POJO и создает JSON. Конечно, я хочу избежать построения другого объектного графа данных, которые уже сериализованы в JSON.Как построить дерево JsonNodes непосредственно из JsonGenerator

Сначала я рассматривал использование @JsonRawValue, но, к сожалению, это не сработало, так как аннотация должна была быть полем на класс, который принадлежит другому процессу, и который не может быть изменен.

Однако, если я передам дерево JsonNodes другому процессу, все будет работать. Проблема в том, что единственный способ найти дерево JsonNode - это проанализировать поток. Я думал, что могу использовать мой существующий генератор для подачи парсера или другого дерева.

Есть ли такое решение? Что мне не хватает?

+0

Там есть 'JsonNodeFactory' для этого. – fge

+0

@fge Можете ли вы уточнить? –

+0

«JsonNodeFactory» позволяет создавать экземпляры 'JsonNode' с нуля любого типа. Но вы также можете сериализовать POJO для JSON. Непонятно, что вы хотите точно? – fge

ответ

1

Вы должны реализовать JsonGenerator, который накапливает JsonToken с (а не записывать непосредственно в поток байтов), и JsonParser, что перебирает существующие JsonToken с (а не разбор их из потока байтов).

Update: Джексон имеет класс, который реализует этот:

TokenBuffer t = new TokenBuffer(new ObjectMapper()); 
t.writeStartObject(); 
t.writeStringField("message", "Hello!"); 
t.writeEndObject(); 
JsonParser parser = t.asParser(); 
+0

Согласен! У меня нет проблем с внедрением JsonNode, создающим JsonGenerator. Я просто подумал, что уже есть решение. –

+0

Просто был другой взгляд, и вот! Джексон отправляется с классом 'com.fasterxml.jackson.databind.util.TokenBuffer', который реализует' JsonGenerator' и имеет метод 'asParser()' для получения 'JsonParser'. – ejain

+0

Спасибо, это хорошо работает. –

Смежные вопросы