2017-03-17 17 views
1

JSONのシリアル化にJacksonを使用しています。私はJavaのリスト(文字列値を含む)をJSON配列に変換しようとしています。私はジャーナル経由でJSON ArrayにJavaリストを書き込む

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(); 

例外

Iから例外を取得
Can not write a string, expecting field name (context: Object) 

「ジェネレータをJsonGeneratorのWriteStringメソッドを使用して、次のアプローチ(問題のそれぞれについて、以下のとおり)

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

だから、あなたはあなたのリストを含む、単一のキーという名前の引数を持つJSONオブジェクトをしたいですか?そうですか?あなたのリストを含むargsという名前の単一のフィールドを持つクラスを作成し、そのクラスのインスタンスを直列化するのはなぜですか? –

+0

はそれを試みます - 私は発電機を通して同じことを達成できることを望んでいました。 –

+0

ジェネレータを介して有効なすべてのjsonを達成できます。シリアライザ(素晴らしい提案です)を試してみたら、少なくともこの質問を終わらせてください。そうしないと、「シリアライザを使用しないでください。」の質問/回答がもう1つもありません。 – 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(); 
関連する問題