2017-03-17 318 views
1

我使用Jackson進行JSON序列化。我試圖將Java列表(包含字符串值)轉換爲JSON數組。我試着用JsonGenerator的writeString通過Jackson將Java List寫入JSON Array

final JsonGenerator generator = factory.createGenerator(output, JsonEncoding.UTF8); 
    generator.writeStartArray(); 
     for (String arg: argsList) { 
      generator.writeStartObject(); 
      log.info("arg value is {}", arg); 
      generator.writeString(arg); 
      generator.writeEndObject(); 
     } 
     generator.writeEndArray(); 

異常

Can not write a string, expecting field name (context: Object) 

我從得到的異常「生成器(每個如下問題)以下方法

1.寫入數組元素.writeString(ARG)」。我不能使用writeStringField。

對象映射

ObjectMapper mapper = new ObjectMapper(); 
mapper.writeValue(out, argsList); 
      final byte[] argsBytes = out.toByteArray(); 
      generator.writeFieldName("args"); 
      generator.writeObjectField("args", argsBytes) 

這將創建數組作爲一個字符串,而不是JSON對象中的數組(這就是我想實現)。歡迎大家提出意見。

結束狀態(要達到):

{ 
"args":["abc","def","ghi","jkl","mno"] 
} 
+0

所以,你想與一個名爲ARGS一個鍵一個JSON對象,包含你的名單?是對的嗎?爲什麼不創建一個類,其中包含名爲args的單個字段,幷包含您的列表,並序列化該類的一個實例? –

+0

會嘗試 - 我希望我可以通過發生器達到同樣的效果。 –

+0

您可以通過生成器實現每個有效的json。如果你確實嘗試了一個序列化程序(這是一個很好的建議),請至少完成這個問題,這樣我們就不會再有另一個「不要那麼做了,使用序列化程序」問題/答案。 – weston

回答

1

通過開始/結束圍繞每個數組項,你在做什麼,正在努力使無效的JSON對象:

{ 
    "args":[{"abc"},{"def"},{"ghi"},{"jkl"},{"mno"}] 
} 

和發電機正確地阻止你這樣做。

就直接寫字符串到數組:

final JsonGenerator generator = factory.createGenerator(output, JsonEncoding.UTF8); 
generator.writeStartArray(); 
for (String arg: argsList) { 
    generator.writeString(arg); 
} 
generator.writeEndArray();