Java および Spring Boot での Jackson による JSON のプリティプリント

Jackson は、Java および Spring Boot でシリアライゼーションとデシリアライゼーションを操作するための最も一般的なライブラリの XNUMX つであり、主に POJO と JSON の間の解析と変換に使用されます。

ただし、Jackson と一緒に作業したことがある場合は、デフォルトできれいな印刷が明確に欠けていることに気付くでしょう。

{Task 1=In_Progress, Task 2=Done, Task 3=Planned}

この短いチュートリアルでは、標準 Java の Jackson と Spring Boot を使用して JSON をプリティプリントする方法を学びます。

JSON 文字列と、JSON 文字列に変換された POJO を使用します。これは、これらの動作が異なるためです。

public class Book {
    private String title;
    private String author;
    private int releaseYear;

    public Book(String title, String author, int releaseYear) {
        this.title = title;
        this.author = author;
        this.releaseYear = releaseYear;
    }
    

インスタンス化しましょう Book インスタンス、および入力用の文字列:

String inputString = "{n" +
        ""Task 1" : "In_Progress",n" +
        ""Task 2" : "Done",n" +
        ""Task 3" : "Planned"n" +
        "}";

Book book = new Book("Our Mathematical Universe", "Max Tegmark", 2014);

Jackson で JSON をプリティプリント XNUMX 回

グローバルな印刷フラグを設定するのではなく、XNUMX 回の呼び出しで XNUMX 回だけプリティ印刷する場合は、単純に次のように使用できます。 writerWithDefaultPrettyPrinter() 値を文字列として書き込む前に呼び出します。

ObjectMapper mapper = new ObjectMapper();

Object jsonString = mapper.readValue(inputString, Object.class);
String indentedString = mapper.writerWithDefaultPrettyPrinter()
                              .writeValueAsString(jsonString);
        
        
System.out.println(jsonString);
System.out.println(indentedString);

入力文字列は (JSON からオブジェクトへ) から読み取られ、このオブジェクトの値は整形印刷 (オブジェクトから JSON) を使用して文字列に書き戻されます。

{Task 1=In_Progress, Task 2=Done, Task 3=Planned}

{
  "Task 1" : "In_Progress",
  "Task 2" : "Done",
  "Task 3" : "Planned"
}

または、使用する場合 readTree()、 結果として JsonNode ています toPrettyString() 文字列をきれいに印刷された JSON に変換するための非常に簡単な方法として機能する関数:

ObjectMapper mapper = new ObjectMapper();
Object jsonString = mapper.readTree(inputString).toPrettyString();
System.out.println(jsonString);

これは、入力 JSON 文字列をフォーマットするための迅速かつ簡単な方法です! POJO を使用する場合、特定の入力から読み取る代わりに、オブジェクトから JSON への変換のみを実行し、きれいな印刷を有効にします。

ObjectMapper mapper = new ObjectMapper();

String jsonBook = mapper.writeValueAsString(book);
String indentedBook = mapper.writerWithDefaultPrettyPrinter()
                            .writeValueAsString(book);


System.out.println(jsonBook);
System.out.println(indentedBook);
{"title":"Our Mathematical Universe","author":"Max Tegmark","releaseYear":2014}
{
  "title" : "Our Mathematical Universe",
  "author" : "Max Tegmark",
  "releaseYear" : 2014
}

グローバルプリティプリント設定

または、プロジェクトで Jackson のグローバルな動作が望ましい場合は、グローバルなプリティ プリンティングを有効にすることもできます。 これは、 enable() の方法 ObjectMapper() インスタンス化するときのインスタンス:

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

オブジェクトを JSON 文字列として書き込むとすぐに、デフォルトで整形出力が有効になります。

Object jsonString = mapper.readValue(inputString, Object.class);
String indentedString = mapper.writeValueAsString(jsonString);

System.out.println(jsonString);
System.out.println(indentedString);

この結果:

{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
{
  "Task 1" : "In_Progress",
  "Task 2" : "Done",
  "Task 3" : "Planned"
}

POJO を使用する場合:

String jsonBook = mapper.writeValueAsString(book);
System.out.println(jsonBook);

ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!

{
  "title" : "Our Mathematical Universe",
  "author" : "Max Tegmark",
  "releaseYear" : 2014
}

pretty-printing が一般的な表示形式である場合、このアプローチは非常に冗長ではありません。

Spring Boot で Jackson をきれいに印刷する

マニュアルなしでSpring Bootを使用している場合 ObjectMapper インスタンスが作成され、基礎となるシリアライザーに依存している場合、設定できます indent_output フラグを立てる true セクションに application.properties ファイル:

spring.jackson.serialization.indent_output=true

または、 application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

これにより、 SerializationFeature.INDENT_OUTPUT 春の旗 ObjectMapper インスタンス。

まとめ

この短いチュートリアルでは、Jackson を使用して文字列または POJO から JSON をきれいに印刷する方法を見てきました。 単一印刷の変更 (一度だけきれいに印刷したい場合) と、グローバル Jackson フラグを設定することを検討しました。 ObjectMapper. 最後に、Jackson でプリティ プリントを有効にするための Spring Boot プロパティの変更について調べました。

タイムスタンプ:

より多くの スタックアバス