Pretty-Printing JSON z Jacksonom v Javi in ​​Spring Boot

Jackson je ena najpogostejših knjižnic za delo s serializacijo in deserializacijo v Javi in ​​Spring Boot, ki se uporablja predvsem za razčlenjevanje in pretvorbo med POJO in JSON.

Če pa ste delali z Jacksonom, boste opazili izrazito pomanjkanje privzetega lepega tiska:

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

V tej kratki vadnici se boste naučili, kako lepo natisniti JSON z Jacksonom v standardni Javi in ​​s Spring Boot.

Delali bomo z nizom JSON in POJO, pretvorjenim v niz JSON, saj se ti obnašajo drugače:

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;
    }
    

Instanciirajmo a Book primerek in niz za vnos:

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

Pretty-Print JSON z Jackson Once

Če želite preprosto lepo natisniti enkrat, v enem samem klicu, namesto da nastavite globalno zastavico za tiskanje – lahko preprosto uporabite writerWithDefaultPrettyPrinter() pokličite, preden zapišete vrednost kot niz:

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

Vhodni niz je bil prebran iz (JSON-to-Object), vrednost tega predmeta pa je bila zapisana nazaj v niz z uporabo lepega tiskanja (Object-to-JSON):

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

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

Druga možnost je, da pri uporabi readTree(), rezultat JsonNode ima toPrettyString() funkcija, ki služi kot odličen preprost način za pretvorbo nizov v lepo natisnjen JSON:

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

To je hiter in preprost način za oblikovanje vhodnega niza JSON! Pri delu s POJO bomo namesto branja iz danega vnosa izvedli samo pretvorbo predmeta v JSON in omogočili lepo tiskanje:

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
}

Globalna nastavitev lepega tiska

Druga možnost je, da omogočite globalno lepo tiskanje, če je to prednostno globalno vedenje Jacksona za vaš projekt. To je tako enostavno kot uporaba enable() metoda ObjectMapper() na primer, ko ga instanciirate:

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

Takoj, ko napišete predmet kot niz JSON, bo lepo tiskanje privzeto omogočeno:

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

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

Rezultat tega je:

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

S POJO:

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

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

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

Ta pristop je bistveno manj dobeseden, če je lepi tisk običajna oblika prikaza.

Pretty-Printing Jackson s Spring Boot

Če uporabljate Spring Boot, brez priročnika ObjectMapper in se zanašate na osnovni serializator, lahko nastavite indent_output zastavo do true v application.properties datoteka:

spring.jackson.serialization.indent_output=true

Ali v application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

To določa SerializationFeature.INDENT_OUTPUT zastavo v Spring's ObjectMapper na primer.

zaključek

V tej kratki vadnici smo si ogledali, kako lahko lepo natisnete JSON iz niza ali POJO z uporabo Jacksona. Raziskali smo spremembe z enim tiskom (ko želite lep tisk le enkrat) in nastavitev globalne Jacksonove zastavice za ObjectMapper. Nazadnje smo si ogledali spreminjanje lastnosti Spring Boot za omogočanje lepega tiskanja z Jacksonom.

Časovni žig:

Več od Stackabuse