Melko tulostava JSON Jacksonin kanssa Javassa ja Spring Bootissa

Jackson on yksi yleisimmistä Javan ja Spring Bootin serialisoinnin ja deserialisoinnin kirjastoista, jota käytetään ensisijaisesti POJO- ja JSON-tiedostojen jäsentämiseen ja muuntamiseen.

Jos olet kuitenkin työskennellyt Jacksonin kanssa, huomaat oletuksena selkeän kauniin tulostuksen puutteen:

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

Tässä lyhyessä opetusohjelmassa opit tulostamaan JSON-tiedostoja nätisti Jacksonilla tavallisella Javalla ja Spring Bootilla.

Työskentelemme JSON-merkkijonon ja JSON-merkkijonoksi muunnetun POJOn kanssa, koska nämä käyttäytyvät eri tavalla:

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

Instantioidaan a Book esimerkki ja syötteen merkkijono:

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 Jackson Oncen kanssa

Jos haluat yksinkertaisesti tulostaa kauniin kerran, yhdellä puhelulla yleisen tulostuslipun asettamisen sijaan – voit käyttää writerWithDefaultPrettyPrinter() soita ennen arvon kirjoittamista merkkijonona:

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

Syöttömerkkijono luettiin kohteesta (JSON-to-Object), ja tämän objektin arvo kirjoitettiin takaisin merkkijonoksi kauniilla tulostuksella (Object-to-JSON):

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

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

Vaihtoehtoisesti käytettäessä readTree(), tuloksena JsonNode on toPrettyString() toiminto, joka toimii erinomaisena yksinkertaisena tapana muuntaa merkkijonot kauniisti painetuiksi JSONiksi:

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

Tämä on nopea ja yksinkertainen tapa muotoilla syötetty JSON-merkkijono! Kun työskentelemme POJO-tiedostojen kanssa, suoritamme vain Object-to-JSON-muunnoksen sen sijaan, että luemme tietystä syötteestä ja sallimme kauniin tulostuksen:

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
}

Yleinen Pretty-Print Setting

Vaihtoehtoisesti voit ottaa käyttöön maailmanlaajuisen kauniin tulostuksen, jos se on Jacksonin suositeltava globaali käyttäytyminen projektissasi. Tämä on yhtä helppoa kuin käyttää enable() menetelmä ObjectMapper() esimerkiksi kun luot sen:

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

Heti kun kirjoitat objektin JSON-merkkijonona, kaunis tulostus on oletuksena käytössä:

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

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

Tämä johtaa:

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

POJO:lla:

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

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

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

Tämä lähestymistapa on huomattavasti vähemmän monisanainen, jos kaunis painatus on yleinen näyttömuoto.

Näppärä painatus Jackson jousikenkä

Jos käytät Spring Bootia, ilman käyttöohjetta ObjectMapper instanssia luodaan ja luota taustalla olevaan serialisaattoriin, voit määrittää indent_output lippu true vuonna application.properties tiedosto:

spring.jackson.serialization.indent_output=true

Tai sisään application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

Tämä asettaa SerializationFeature.INDENT_OUTPUT lippu keväällä ObjectMapper ilmentymä.

Yhteenveto

Tässä lyhyessä opetusohjelmassa olemme tarkastelleet, kuinka voit tulostaa JSON-tiedoston kauniisti merkkijonosta tai POJOsta Jacksonin avulla. Olemme tutkineet yksittäispainatuksen muutoksia (kun haluat vain kauniin tulostaa kerran) ja maailmanlaajuisen Jackson-lipun asettamista ObjectMapper. Lopuksi tarkastelimme Spring Bootin ominaisuuksien muuttamista mahdollistaaksemme kauniin tulostuksen Jacksonilla.

Aikaleima:

Lisää aiheesta Stackabus