"हाय, अमीगो!"

"हाय, ऐली!"

"चूंकि आप पहले ही JSON से परिचित हो चुके हैं, तो चलिए आज इसके बारे में और बात करते हैं।"

"ठीक है। यह आमतौर पर कहाँ प्रयोग किया जाता है?"

"यहां बताया गया है कि यह आमतौर पर कैसे काम करता है। कोई (क्लाइंट) जावा प्रोग्राम (सर्वर) से डेटा का अनुरोध करता है। प्रोग्राम जावा ऑब्जेक्ट बनाता है और उन्हें डेटाबेस से जानकारी के साथ भरता है। फिर यह उन्हें एक प्रारूप में परिवर्तित करता है जो अनुरोधकर्ता (क्लाइंट) ) समझ सकते हैं, जैसे कि JSON, और उन्हें वापस भेज देता है।"

"मैं आपको बताता हूं कि जावा में JSON के साथ कैसे काम करना है। अनिवार्य रूप से, हमें केवल दो चीजें करने की जरूरत है: जावा ऑब्जेक्ट्स को JSON फॉर्मेट में क्रमबद्ध करें, और JSON फॉर्मेट से जावा ऑब्जेक्ट्स को डिसेरलाइज़ करें।"

"दूसरे शब्दों में, JSON एक प्रोग्राम से दूसरे प्रोग्राम में संदेश/डेटा भेजने के लिए एक मानक है। ऐसे कई मानक हैं। लेकिन यदि प्रोग्राम जावास्क्रिप्ट में लिखा गया है, तो यह आमतौर पर JSON का उपयोग करने का प्रयास करता है।"

"ठीक है, मैं तैयार हूं।"

"बढ़िया। तो चलिए शुरू करते हैं।"

JSON - 1 में क्रमांकन

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

"इन विभिन्न रूपरेखाओं में क्या अंतर है?"

"वे आम तौर पर अपनी जटिलता के स्तर में भिन्न होते हैं: ऐसे ढांचे हैं जो केवल मूल बातें ही कर सकते हैं, लेकिन वे बहुत छोटे और सरल हैं। और बड़े जटिल ढांचे हैं जो बहुत कुछ कर सकते हैं।"

"जैक्सन सबसे लोकप्रिय रूपरेखाओं में से एक है। हम इसे एक उदाहरण के रूप में उपयोग करेंगे क्योंकि हम देखते हैं कि JSON के साथ कैसे काम करना है।"

"सबसे पहले, आपको इस फ्रेमवर्क को डाउनलोड करना होगा और इसे अपने प्रोजेक्ट में जोड़ना होगा। आपको इसे सीधे IntelliJ IDEA में करने की आवश्यकता है। आप इस लिंक का उपयोग करके फ्रेमवर्क डाउनलोड कर सकते हैं। "

"पूर्ण।"

"बढ़िया। चलो आगे बढ़ते हैं।"

"जावा ऑब्जेक्ट को जेएसओएन में कनवर्ट करना उतना ही आसान है जितना इसे क्रमबद्ध करना। ऐसा करने के लिए, एक विशेष ऑब्जेक्टमैपर क्लास (com.fasterxml.jackson.databind.ObjectMapper) है।"

"मैं आपको एक कामकाजी उदाहरण दिखाता हूं, और फिर हम इसका विश्लेषण करेंगे:"

किसी ऑब्जेक्ट को JSON में कनवर्ट करें"
public static void main(String[] args) throws IOException
{
 // Create an object to be serialized into JSON
 Cat cat = new Cat();
 cat.name = "Missy";
 cat.age = 5;
 cat.weight = 4;

 // Write the result of the serialization to a StringWriter
 StringWriter writer = new StringWriter();

 // This is the Jackson object that performs the serialization
 ObjectMapper mapper = new ObjectMapper();

 // And here's the serialization itself: the first argument is where, and the second is what
 mapper.writeValue(writer, cat);

 // Convert everything written to the StringWriter into a String
 String result = writer.toString();
 System.out.println(result);
}
एक कैट क्लास जिसकी वस्तुएँ JSON में परिवर्तित हो जाती हैं
@JsonAutoDetect
class Cat
{
 public String name;
 public int age;
 public int weight;
Cat(){}
}
क्रमांकन परिणाम और स्क्रीन आउटपुट:
{"name":"Missy", "age":5, "weight":4}

"यह ऐसे काम करता है:"

"4-7 पंक्तियों में, हम एक कैट ऑब्जेक्ट बनाते हैं और इसे डेटा से भरते हैं।"

"पंक्ति 10 में, हम एक राइटर ऑब्जेक्ट बनाते हैं जहाँ हम ऑब्जेक्ट का JSON-स्ट्रिंग प्रतिनिधित्व लिखेंगे।"

"पंक्ति 13 में, हम एक ऑब्जेक्टमैपर ऑब्जेक्ट बनाते हैं जो सभी क्रमबद्धता का प्रदर्शन करेगा।"

"पंक्ति 16 में, हम लेखक को बिल्ली वस्तु का JSON प्रतिनिधित्व लिखते हैं ।"

"19-20 पंक्तियों में, हम स्क्रीन पर परिणाम प्रदर्शित करते हैं।"

"सब कुछ बहुत सरल दिखता है। जावा में मूल क्रमांकन से कठिन नहीं है।"

"डिसेरिएलाइज़ेशन कैसा दिखेगा?"

"यह लगभग समान है, बस छोटा है:"

किसी ऑब्जेक्ट को JSON से कनवर्ट करें
public static void main(String[] args) throws IOException
{
 String jsonString = "{ \"name\":\"Missy\", \"age\":5, \"weight\":4}";
 StringReader reader = new StringReader(jsonString);

 ObjectMapper mapper = new ObjectMapper();

 Cat cat = mapper.readValue(reader, Cat.class);
}
एक वर्ग जिसका ऑब्जेक्ट JSON प्रारूप से deserialized है
@JsonAutoDetect
class Cat
{
 public String name;
 public int age;
 public int weight;

 Cat() { }
}

"यह और भी आसान है। हम ObjectMapper लेते हैं और इसे JSON के साथ एक स्ट्रिंग या एक StringReader पास करते हैं, साथ ही ऑब्जेक्ट के वर्ग को deserialized किया जाता है । फिर हम रीडवैल्यू विधि कहते हैं , और आउटपुट के रूप में हमें एक तैयार जावा ऑब्जेक्ट मिलता है। सभी डेटा।"

"ठीक है, यह बिल्कुल जावा में डिसेरिएलाइज़ेशन जैसा है।"

"लगभग। JSON में क्रमबद्ध, या उससे अलग किए गए ऑब्जेक्ट्स पर कई आवश्यकताएं रखी गई हैं:"

" 1)  फ़ील्ड दिखाई देनी चाहिए: उन्हें या तो सार्वजनिक होना चाहिए या गेटर्स और सेटर्स होना चाहिए"

" 2)  एक डिफ़ॉल्ट कन्स्ट्रक्टर होना चाहिए (पैरामीटर के बिना एक)"

"मैं देख रहा हूँ। यह बहुत आश्चर्य की बात नहीं है। लेकिन जावा ने सब कुछ क्रमबद्ध कर दिया, यहाँ तक कि निजी क्षेत्रों को भी।"

"ठीक है, वह जावा था। इसमें छिपे हुए डेटा तक पहुंच है। आप अपने आप से छुपा नहीं सकते।"

"यहाँ एक तीसरा पहलू है। मुझे आशा है कि आपने कैट क्लास पर @JsonAutoDetect एनोटेशन पर ध्यान दिया है?"

"हाँ, मैं बस पूछने वाला था कि यह क्या था।"

"यह एक एनोटेशन है: जैक्सन फ्रेमवर्क के लिए हाउसकीपिंग जानकारी। सही एनोटेशन का उपयोग करके, आपके पास JSON में क्रमांकन के परिणामों पर काफी लचीला नियंत्रण है।"

"कूल! किस तरह के एनोटेशन हैं?"

"कुछ उदाहरण निम्नलिखित हैं:"

टिप्पणी विवरण
@JsonAutoDetect एक वर्ग के सामने रखा।
जेएसओएन में क्रमबद्ध होने के लिए तैयार वर्ग को चिह्नित करता है।
@JsonIgnore एक संपत्ति के सामने रखा गया।
सीरियलाइजेशन के दौरान संपत्ति को नजरअंदाज कर दिया जाएगा।
@JsonProperty एक संपत्ति या गेटर या सेटर से पहले रखा गया। क्रमांकन के दौरान आपको एक अलग फ़ील्ड नाम निर्दिष्ट करने देता है।
@JsonWriteNullProperties एक वर्ग के सामने रखा।
ऑब्जेक्ट फ़ील्ड जो शून्य हैं उन्हें अनदेखा नहीं किया जाएगा।
@JsonPropertyOrder एक वर्ग के सामने रखा।
क्रमांकन के दौरान आपको फ़ील्ड ऑर्डर निर्दिष्ट करने देता है।

"कितना दिलचस्प है! क्या और भी हैं?"

"कई हैं। लेकिन हम उन्हें अभी कवर नहीं करेंगे। अब हम अपने पहले उदाहरण पर थोड़ा फिर से काम करते हैं:"

किसी वस्तु को JSON में बदलें
public static void main(String[] args) throws IOException
{
 Cat cat = new Cat();
 cat.name = "Missy";
 cat.age = 5;
 cat.weight = 4;

 StringWriter writer = new StringWriter();

 ObjectMapper mapper = new ObjectMapper();

 mapper.writeValue(writer, cat);

 String result = writer.toString();
 System.out.println(result);
}
एक वर्ग जिसका ऑब्जेक्ट JSON में परिवर्तित हो जाता है
@JsonAutoDetect
class Cat
{
 @JsonProperty("alias")
 public String name;
 public int age;
 @JsonIgnore
 public int weight;

 Cat() {
 }
}
क्रमांकन परिणाम और स्क्रीन आउटपुट:
{"age":5, "alias":"Missy"}

"कोड वही रहता है, लेकिन मैंने एनोटेशन बदल दिया: मैंने नाम फ़ील्ड के लिए एक और नाम निर्दिष्ट किया: उपनाम। मैंने वेट फ़ील्ड को इग्नोर के रूप में भी चिह्नित किया, जिससे JSON ऑब्जेक्ट बदल गया।"

"यह अच्छा है कि आप सब कुछ इस तरह अनुकूलित कर सकते हैं। मुझे लगता है कि मुझे यह निश्चित रूप से उपयोगी लगेगा।"

"और डिसेरिएलाइज़ेशन यह समझेगा कि इसके साथ कैसे काम करना है? जब JSON से जावा ऑब्जेक्ट के लिए डिसेरिएलाइज़ किया जाता है, तो उपनाम फ़ील्ड का मान कैट ऑब्जेक्ट के नाम फ़ील्ड में लिखा जाएगा?"

"हाँ, डिसेरिएलाइज़ेशन उसी तरह काम करेगा जैसा उसे करना चाहिए। यह स्मार्ट है।"

"फिर खुश होने की क्या बात नहीं है।"

"इस दिलचस्प पाठ के लिए धन्यवाद, ऐली।"