Päris prinditav JSON Jacksoniga Javas ja Spring Bootis

Jackson on Java ja Spring Boot serialiseerimise ja deserialiseerimisega töötamiseks üks levinumaid teeke, mida kasutatakse peamiselt POJO-de ja JSON-i vaheliseks sõelumiseks ja teisendamiseks.

Kui olete Jacksoniga koostööd teinud, märkate vaikimisi selget ilusat printimise puudumist:

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

Sellest lühikesest õpetusest saate teada, kuidas JSON-i standardse Java ja Spring Booti abil Jacksoniga ilusti printida.

Töötame JSON-stringiga ja POJO-ga, mis on teisendatud JSON-stringiks, kuna need käituvad erinevalt.

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

Instantseerime a Book näide ja sisendi string:

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 koos Jackson Once'iga

Kui soovite lihtsalt ühe kõnega ilusti printida, selle asemel et määrata globaalset printimislippu – võite lihtsalt kasutada writerWithDefaultPrettyPrinter() helistage enne väärtuse kirjutamist stringina:

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

Sisendstring loeti (JSON-to-Object) ja selle objekti väärtus kirjutati tagasi stringiks, kasutades ilusat printimist (Object-to-JSON):

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

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

Teise võimalusena, kui kasutate readTree(), saadud JsonNode on toPrettyString() funktsioon, mis on suurepärane lihtne viis stringide teisendamiseks kenasti trükitud JSON-iks:

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

See on kiire ja lihtne viis sisend-JSON-stringi vormindamiseks! POJO-dega töötades teostame antud sisendist lugemise asemel ainult objektist JSON-i teisenduse ja võimaldame ilusa printimise:

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
}

Globaalne ilusa prindi seadistus

Teise võimalusena saate lubada globaalse ilusa printimise, kui see on teie projekti jaoks Jacksoni eelistatud globaalne käitumine. See on sama lihtne kui kasutada enable() meetod ObjectMapper() Näiteks kui teete seda:

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

Niipea, kui kirjutate objekti JSON-stringina, on ilus printimine vaikimisi lubatud:

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

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

Selle tulemuseks on:

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

POJO-dega:

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

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

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

See lähenemisviis on oluliselt vähem üksikasjalik, kui ilus printimine on tavaline kuvavorming.

Ilusa trükiga Jackson koos kevadsaapaga

Kui kasutate Spring Booti, ​​ilma juhendita ObjectMapper eksemplari loomisel ja tugineda aluseks olevale serialiseerijale, saate määrata indent_output lipp sellele true aasta application.properties faili:

spring.jackson.serialization.indent_output=true

Või sisse application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

See määrab SerializationFeature.INDENT_OUTPUT lipp kevadel ObjectMapper Näiteks

Järeldus

Selles lühikeses õpetuses vaatlesime, kuidas saate Jacksoni abil JSON-i stringist või POJO-st kaunilt printida. Oleme uurinud ühe trükiga muudatusi (kui soovite ilusti printida ainult üks kord) ja globaalse Jacksoni lipu määramist ObjectMapper. Lõpuks uurisime Spring Booti atribuutide muutmist, et võimaldada Jacksoniga ilusat printimist.

Ajatempel:

Veel alates Stackabus