3

次のようなデータがあります。

{
    "status": "success",
    "data": {
        "irrelevant": {
            "serialNumber": "XYZ",
            "version": "4.6"
        },
        "data": {
            "lib": {
                "files": [
                    "data1",
                    "data2",
                    "data3",
                    "data4" 
                ],
                "another file": [
                    "file.jar",
                    "lib.jar" 
                ],
                "dirs": []
            },
            "jvm": {
                "maxHeap": 10,
                "maxPermSize": "12"
            },
            "serverId": "134",
            "version": "2.3"
        }
    }
}

JSONデータを整形するために使用している関数は次のとおりです。

public static String stringify(Object o, int space) {
    ObjectMapper mapper = new ObjectMapper();
    try {
        return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(o);
    } catch (Exception e) {
        return null;
    }
}

Jackson JSON Processor を使用して、JSON データを文字列にフォーマットしています。何らかの理由で、JSON 形式が必要な形式ではありません。その関数にデータを渡すとき、取得している形式は次のとおりです。

{
    "status": "success",
    "data": {
        "irrelevant": {
            "serialNumber": "XYZ",
            "version": "4.6"
        },
        "another data": {
            "lib": {
                "files": [ "data1", "data2", "data3", "data4" ],
                "another file": [ "file.jar", "lib.jar" ],
                "dirs": []
            },
            "jvm": {
                "maxHeap": 10,
                "maxPermSize": "12"
            },
            "serverId": "134",
            "version": "2.3"
        }
    }
}

「別のデータ」オブジェクトの下でわかるように、配列は、配列内の各項目の新しい行ではなく、1 行全体として表示されます。JSON データを正しくフォーマットするために stringify 関数を変更する方法がわかりません。

4

2 に答える 2

5

DefaultPrettyPrinterがどのように見えるかを確認する必要があります。このクラスで本当に興味深いのは、_arrayIndenterプロパティです。このプロパティのデフォルト値はFixedSpaceIndenterクラスです。Lf2SpacesIndenterクラスで変更する必要があります。

メソッドは次のようになります。

public static String stringify(Object o) {
    try {
        ObjectMapper mapper = new ObjectMapper();
        DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
        printer.indentArraysWith(new Lf2SpacesIndenter());
        return mapper.writer(printer).writeValueAsString(o);
    } catch (Exception e) {
        return null;
    }
}
于 2013-07-01T23:12:56.667 に答える