जावा और स्प्रिंग बूट में जैक्सन के साथ सुंदर-मुद्रण JSON

जैक्सन जावा और स्प्रिंग बूट में क्रमांकन और अक्रमांकन के साथ काम करने के लिए सबसे आम पुस्तकालयों में से एक है, मुख्य रूप से पीओजेओ और जेएसओएन के बीच पार्सिंग और कनवर्ट करने के लिए उपयोग किया जाता है।

हालाँकि, यदि आपने जैक्सन के साथ काम किया है, तो आप डिफ़ॉल्ट रूप से सुंदर-मुद्रण की एक अलग कमी देखेंगे:

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

इस संक्षिप्त ट्यूटोरियल में, आप सीखेंगे कि मानक जावा में जैक्सन के साथ और स्प्रिंग बूट के साथ JSON को कैसे सुंदर-प्रिंट किया जाए।

हम एक JSON स्ट्रिंग के साथ काम करेंगे, और एक POJO JSON स्ट्रिंग में परिवर्तित हो जाएगा, क्योंकि ये अलग तरह से व्यवहार करते हैं:

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

आइए तुरंत करें a 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);

जैक्सन वन्स के साथ सुंदर-प्रिंट JSON

यदि आप ग्लोबल प्रिंटिंग फ़्लैग सेट करने के बजाय, एक कॉल में केवल एक बार सुंदर-प्रिंट करना चाहते हैं - तो आप बस इसका उपयोग कर सकते हैं 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-to-Object) से पढ़ा गया था, और इस ऑब्जेक्ट का मान सुंदर-प्रिंटिंग (ऑब्जेक्ट-टू-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 स्ट्रिंग को प्रारूपित करने का यह एक त्वरित और आसान तरीका है! पीओजेओ के साथ काम करते समय, किसी दिए गए इनपुट से पढ़ने के बजाय, हम केवल ऑब्जेक्ट-टू-जेएसओएन रूपांतरण करेंगे और सुंदर-प्रिंटिंग सक्षम करेंगे:

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
}

वैश्विक सुंदर-प्रिंट सेटिंग

वैकल्पिक रूप से, आप वैश्विक सुंदर-मुद्रण को सक्षम कर सकते हैं, यदि यह आपके प्रोजेक्ट के लिए जैक्सन का बेहतर वैश्विक व्यवहार है। यह का उपयोग करने जितना आसान है 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"
}

पीओजेओ के साथ:

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

सर्वोत्तम प्रथाओं, उद्योग-स्वीकृत मानकों और शामिल चीट शीट के साथ, Git सीखने के लिए व्यावहारिक मार्गदर्शिका देखें। Googling Git कमांड को रोकें और वास्तव में सीखना यह!

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

यदि सुंदर-मुद्रण एक सामान्य प्रदर्शन प्रारूप है तो यह दृष्टिकोण काफी कम क्रियात्मक है।

स्प्रिंग बूट के साथ प्रिटी-प्रिंटिंग जैक्सन

यदि आप बिना किसी मैनुअल के स्प्रिंग बूट का उपयोग कर रहे हैं ObjectMapper उदाहरण बनाया जा रहा है और अंतर्निहित धारावाहिक पर भरोसा करते हैं, आप सेट कर सकते हैं indent_output करने के लिए झंडा true में application.properties फ़ाइल:

spring.jackson.serialization.indent_output=true

या, में application.yaml:

spring:
  jackson:
    serialization:
      INDENT_OUTPUT: true

यह सेट करता है SerializationFeature.INDENT_OUTPUT वसंत में झंडा ObjectMapper उदाहरण।

निष्कर्ष

इस संक्षिप्त ट्यूटोरियल में, हमने देखा है कि कैसे आप जैक्सन का उपयोग करके स्ट्रिंग या पीओजेओ से JSON को सुंदर-प्रिंट कर सकते हैं। हमने सिंगल-प्रिंट परिवर्तनों की खोज की है (जब आप केवल एक बार सुंदर-प्रिंट करना चाहते हैं) और इसके लिए वैश्विक जैक्सन ध्वज सेट कर रहे हैं ObjectMapper. अंत में, हमने जैक्सन के साथ सुंदर मुद्रण को सक्षम करने के लिए स्प्रिंग बूट गुणों को बदलने पर एक नज़र डाली।

समय टिकट:

से अधिक स्टैकब्यूज