2013-02-18 45 views
5

私はJacksonを使用していますし、配列の各要素は次のように、各ラインに行くようなかわいいプリントJSONしたいと思います:真SerializationFeature.INDENT_OUTPUTを設定ジャクソンJSONデシリアライズ:各行の配列要素

 
{ 
    "foo" : "bar", 
    "blah" : [ 
    1, 
    2, 
    3 
    ] 
} 

するだけで改行を挿入オブジェクトを配列要素ではなくオブジェクトフィールドの文字に置き換えてください。

 
{ 
    "foo" : "bar", 
    "blah" : [1, 2, 3] 
} 

これを達成する方法を知っている人はいますか?ありがとう! JSONジェネレータを試してみる

答えて

9

あなたはDefaultPrettyPrinterを拡張し、望ましい行動をarchieveする方法にbeforeArrayValues(...)writeArrayValueSeparator(...)をオーバーライドすることができます。その後、新しい実装をsetPrettyPrinter(…)経由でJsonGeneratorに追加する必要があります。次のように役立つヒントに

13

おかげで、私は希望インデントと私のObjectMapperを設定することができました:得るために

private static class PrettyPrinter extends DefaultPrettyPrinter { 
    public static final PrettyPrinter instance = new PrettyPrinter(); 

    public PrettyPrinter() { 
     _arrayIndenter = Lf2SpacesIndenter.instance; 
    } 
} 

private static class Factory extends JsonFactory { 
    @Override 
    protected JsonGenerator _createGenerator(Writer out, IOContext ctxt) throws IOException { 
     return super._createGenerator(out, ctxt).setPrettyPrinter(PrettyPrinter.instance); 
    } 
} 

{ 
    ObjectMapper mapper = new ObjectMapper(new Factory()); 
    mapper.configure(SerializationFeature.INDENT_OUTPUT, true); 
} 
+0

ご協力いただきありがとうございます。 +1 – nutlike

1
ありがたいOPによって提供さ answer

が道を示しシングルarray-行単位の要素JSON StringwriteValueAsStringからです。少ないコードでwriteValueのファイルに直接同じフォーマットされたJSONを書くためのソリューションここでそれに基づいて:あなたはDefaultPrettyPrinterを拡張したくない場合は

private static class PrettyPrinter extends DefaultPrettyPrinter { 
    public static final PrettyPrinter instance = new PrettyPrinter(); 

    public PrettyPrinter() { 
     _arrayIndenter = Lf2SpacesIndenter.instance; 
    } 
} 

{ 
    ObjectMapper mapper = new ObjectMapper(); 
    ObjectWriter writer = mapper.writer(PrettyPrinter.instance); 
    writer.writeValue(destFile, objectToSerialize); 
} 
1

あなたはまた、単に外部indentArraysWithプロパティを設定することができます。

ObjectMapper objectMapper = new ObjectMapper(); 
objectMapper.enable(SerializationFeature.INDENT_OUTPUT); 

DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter(); 
prettyPrinter.indentArraysWith(DefaultPrettyPrinter.Lf2SpacesIndenter.instance); 

String json = objectMapper.writer(prettyPrinter).writeValueAsString(object); 
関連する問題