"हाय, अमिगो!"
"हाय, एली!"
"जेएसओएनशी तुमची ओळख आधीच झाली असल्याने, आज त्याबद्दल अधिक बोलूया."
"ठीक आहे. ते सहसा कुठे वापरले जाते?"
"हे सहसा कसे कार्य करते ते येथे आहे. कोणीतरी (क्लायंट) जावा प्रोग्राम (सर्व्हर) कडून डेटाची विनंती करतो. प्रोग्राम Java ऑब्जेक्ट्स तयार करतो आणि डेटाबेसमधून माहिती भरतो. ते नंतर त्यांना विनंतीकर्ता (क्लायंट) च्या फॉरमॅटमध्ये रूपांतरित करतो. ) समजू शकते, जसे की JSON, आणि त्यांना परत पाठवते."
"जावामध्ये JSON सह कसे कार्य करायचे ते मी तुम्हाला सांगतो. मूलत:, आम्हाला फक्त दोन गोष्टी करायच्या आहेत: JSON फॉरमॅटमध्ये Java ऑब्जेक्ट्स सीरिअलाइझ करा आणि JSON फॉरमॅटमधून Java ऑब्जेक्ट्स डीसीरियल करा."
"दुसर्या शब्दात, JSON हे एका प्रोग्राममधून दुसर्या प्रोग्रामला संदेश/डेटा पाठवण्यासाठी एक मानक आहे. असे बरेच मानक आहेत. परंतु जर प्रोग्राम JavaScript मध्ये लिहिलेला असेल, तर तो सहसा JSON वापरण्याचा प्रयत्न करतो."
"ठीक आहे. मी तयार आहे."
"छान. चला तर मग सुरुवात करूया."

"तुम्हाला आधीच माहित आहे की, Java मध्ये बिल्ट-इन मानक अनुक्रमिक साधने आहेत. परंतु ते JSON ला समर्थन देत नाहीत. म्हणून, जर तुम्हाला JSON मध्ये एखादी वस्तू अनुक्रमित करायची असेल, तर तुम्ही लोकप्रिय फ्रेमवर्क (लायब्ररी) पैकी एक वापरू शकता ज्यांना कसे करावे हे माहित आहे. हे कर."
"या वेगवेगळ्या फ्रेमवर्कमध्ये काय फरक आहे?"
"ते सहसा त्यांच्या जटिलतेच्या पातळीमध्ये भिन्न असतात: अशी फ्रेमवर्क आहेत जी केवळ मूलभूत गोष्टी करू शकतात, परंतु ते खूप लहान आणि सोपे आहेत. आणि मोठ्या जटिल फ्रेमवर्क आहेत जे बरेच काही करू शकतात."
"जॅक्सन हे सर्वात लोकप्रिय फ्रेमवर्क आहे. जेएसओएन सोबत कसे काम करायचे ते आम्ही एक उदाहरण म्हणून वापरू."
"प्रथम, तुम्हाला हे फ्रेमवर्क डाउनलोड करावे लागेल आणि ते तुमच्या प्रोजेक्टमध्ये जोडावे लागेल. तुम्हाला हे थेट IntelliJ IDEA मध्ये करणे आवश्यक आहे. तुम्ही ही लिंक वापरून फ्रेमवर्क डाउनलोड करू शकता ."
"झाले."
"छान. चला मग पुढे जाऊया."
"जावा ऑब्जेक्टचे JSON मध्ये रूपांतर करणे तितकेच सोपे आहे जेवढे ते अनुक्रमित करणे. हे करण्यासाठी, एक विशेष ऑब्जेक्टमॅपर वर्ग आहे (com.fasterxml.jackson.databind.ObjectMapper)."
"मी तुम्हाला एक कार्यरत उदाहरण दाखवतो आणि नंतर आम्ही त्याचे विश्लेषण करू:"
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);
}
@JsonAutoDetect
class Cat
{
public String name;
public int age;
public int weight;
Cat(){}
}
{"name":"Missy", "age":5, "weight":4}
"हे कसे कार्य करते ते येथे आहे:"
"ओळी 4-7 मध्ये, आम्ही एक कॅट ऑब्जेक्ट तयार करतो आणि डेटासह पॉप्युलेट करतो."
"ओळ 10 मध्ये, आम्ही एक लेखक ऑब्जेक्ट तयार करतो जिथे आम्ही ऑब्जेक्टचे JSON-स्ट्रिंग प्रतिनिधित्व लिहू."
"१३व्या ओळीत, आम्ही एक ऑब्जेक्टमॅपर ऑब्जेक्ट तयार करतो जो सर्व क्रमवारी पूर्ण करेल."
"१६व्या ओळीत, आम्ही लेखकाला मांजरीच्या वस्तुचे JSON प्रतिनिधित्व लिहितो ."
"19-20 ओळींमध्ये, आम्ही स्क्रीनवर निकाल प्रदर्शित करतो."
"सर्व काही अगदी सोपे दिसते. Java मधील नेटिव्ह सीरियलायझेशनपेक्षा कठीण नाही."
"डिसिरियलायझेशन कसे दिसेल?"
"हे जवळजवळ सारखेच आहे, फक्त लहान:"
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);
}
@JsonAutoDetect
class Cat
{
public String name;
public int age;
public int weight;
Cat() { }
}
"हे आणखी सोपे आहे. आम्ही ऑब्जेक्टमॅपर घेतो आणि JSON सोबत स्ट्रिंग किंवा स्ट्रिंगरीडर पास करतो, तसेच डिसिरियलाइज्ड ऑब्जेक्टचा क्लास देतो. नंतर आम्ही readValue पद्धत म्हणतो आणि आउटपुट म्हणून आम्हाला रेडीमेड Java ऑब्जेक्ट मिळतो. सर्व डेटा."
"ठीक आहे, हे जावामधील डिसिरियलायझेशनसारखे आहे."
"जवळजवळ. JSON मध्ये अनुक्रमित किंवा डीसीरियलाइज केलेल्या वस्तूंवर अनेक आवश्यकता ठेवल्या आहेत:"
" 1) फील्ड दृश्यमान असणे आवश्यक आहे: ते एकतर सार्वजनिक असले पाहिजेत किंवा गेटर्स आणि सेटर असणे आवश्यक आहे"
" 2) डीफॉल्ट कन्स्ट्रक्टर असणे आवश्यक आहे (एक पॅरामीटर्सशिवाय)"
"मी पाहतो. हे फार आश्चर्यकारक नाही. पण Java ने सर्व काही, अगदी खाजगी क्षेत्र देखील अनुक्रमित केले."
"ठीक आहे, ते जावा होते. त्यात लपविलेल्या डेटामध्ये प्रवेश आहे. तुम्ही स्वतःपासून लपवू शकत नाही."
"येथे एक तिसरा पैलू आहे. मला आशा आहे की कॅट क्लासवर @JsonAutoDetect भाष्य तुमच्या लक्षात आले असेल?"
"हो. मी विचारणारच होतो काय ते."
"हे एक भाष्य आहे: जॅक्सन फ्रेमवर्कसाठी हाऊसकीपिंग माहिती. योग्य भाष्य वापरून, तुमच्याकडे JSON मध्ये क्रमवारीच्या परिणामांवर बरेच लवचिक नियंत्रण आहे."
"छान! कसली भाष्ये आहेत?"
"येथे काही उदाहरणे आहेत:"
भाष्य | वर्णन |
---|---|
@JsonAutoDetect | वर्गासमोर ठेवले. JSON मध्ये अनुक्रमित करण्यासाठी तयार असलेल्या वर्गाची खूण करते. |
@Json दुर्लक्ष करा | मालमत्तेसमोर ठेवले. सीरियलायझेशन दरम्यान मालमत्तेकडे दुर्लक्ष केले जाईल. |
@JsonProperty | मालमत्ता किंवा गेटर किंवा सेटरसमोर ठेवलेले. सीरियलायझेशन दरम्यान तुम्हाला वेगळे फील्ड नाव निर्दिष्ट करू देते. |
@JsonWriteNullProperties | वर्गासमोर ठेवले. शून्य असलेल्या ऑब्जेक्ट फील्डकडे दुर्लक्ष केले जाणार नाही. |
@JsonPropertyOrder | वर्गासमोर ठेवले. तुम्हाला क्रमवारी दरम्यान फील्ड ऑर्डर निर्दिष्ट करू देते. |
"किती इंटरेस्टिंग! अजून आहेत का?"
"अनेक आहेत. पण आत्ता आम्ही त्यांना कव्हर करणार नाही. आता आमच्या पहिल्या उदाहरणावर थोडेसे पुन्हा काम करूया:"
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);
}
@JsonAutoDetect
class Cat
{
@JsonProperty("alias")
public String name;
public int age;
@JsonIgnore
public int weight;
Cat() {
}
}
{"age":5, "alias":"Missy"}
"कोड तसाच आहे, परंतु मी भाष्ये बदलली आहेत: मी नाव फील्डसाठी दुसरे नाव निर्दिष्ट केले आहे: उर्फ. मी वजन फील्डला दुर्लक्ष म्हणून चिन्हांकित केले, ज्यामुळे JSON ऑब्जेक्ट बदलला."
"तुम्ही सर्व काही अशा प्रकारे सानुकूलित करू शकता हे चांगले आहे. मला वाटते की मला हे नक्कीच उपयुक्त वाटेल."
"आणि डीसीरियलायझेशनमुळे हे कसे कार्य करायचे ते समजेल? JSON वरून Java ऑब्जेक्टवर डीसीरियलाइझ करताना, कॅट ऑब्जेक्टच्या नावाच्या फील्डमध्ये उपनाम फील्डचे मूल्य लिहिले जाईल?"
"होय, डिसिरियलायझेशन जसे पाहिजे तसे चालेल. ते स्मार्ट आहे."
"मग आनंदी होण्यासारखे काय नाही."
"या मनोरंजक धड्याबद्दल धन्यवाद, एली."
GO TO FULL VERSION