2014-02-15 55 views
0

我已經有使用JsonGenerator編寫JSON的工作進程。現在我需要將這些數據傳遞給另一個期望POJO作爲輸入並生成JSON的進程。當然,我想要避免構建已經序列化爲JSON的數據的另一個對象圖。如何直接從JsonGenerator生成JsonNodes樹

我第一次看到使用@JsonRawValue,但不幸的是它不起作用,因爲註釋需要在字段上在屬於另一個過程的類中,並且不能改變。

但是,如果我將JsonNodes的樹傳遞給另一個進程,事情就會起作用。問題是,我可以找到創建JsonNode樹的唯一方法是解析一個流。我想我可以使用我現有的生成器來提供解析器或其他樹木構建器。

有沒有這樣的解決方案?我錯過了什麼?

+0

有'JsonNodeFactory'這一點。 – fge

+0

@fge你能否詳細說明一下? –

+0

'JsonNodeFactory'允許您從頭開始創建任何類型的'JsonNode'實例。但是你也可以將POJO序列化爲JSON。目前還不清楚你想要什麼? – fge

回答

1

你必須實現一個JsonGenerator,其累積JsonToken秒(而不是直接寫入字節流),以及JsonParser是遍歷現有JsonToken秒(而不是從一個字節流解析它們)。

更新:傑克遜已經實現了這個類:

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

同意!實現生成JsonGenerator的JsonNode沒有問題。我只是認爲已經有了一個解決方案。 –

+0

只是又看了一下,瞧! Jackson提供了一個'com.fasterxml.jackson.databind.util.TokenBuffer'類,該類實現了'JsonGenerator',並有一個'asParser()'方法來獲得'JsonParser'。 – ejain

+0

謝謝,這很好。 –