JSON से Java क्लास जनरेटर
JSON ऑब्जेक्ट्स से Java POJO क्लास डेफिनिशन बनाएँ। यह Jackson-एनोटेटेड क्लासेस बनाता है जिनमें @JsonProperty फील्ड्स, गेटर्स, सेटर्स और JSON वैल्यूज़ से पता चलने वाले सही Java टाइप्स होते हैं।
Jackson के लिए @JsonProperty एनोटेशन वाले Java POJO बनाता है।
JSON प्रकारों को Java प्रिमिटिव और ऑब्जेक्ट्स (String, Integer, Double, Boolean, List<T>) से मैप करता है।
नेस्टेड JSON ऑब्जेक्ट्स के लिए नेस्टेड इनर क्लास डेफ़िनिशन बनाता है।
JavaBeans नेमिंग कन्वेंशन का पालन करते हुए गेटर्स और सेटर्स बनाता है।
JSON डीसीरियलाइज़ेशन के लिए Jackson ObjectMapper के साथ इस्तेमाल करने के लिए तैयार।
कैसे इस्तेमाल करें
इनपुट फ़ील्ड में JSON ऑब्जेक्ट पेस्ट करें
जेनरेटर एनोटेटेड फ़ील्ड्स वाली एक Java क्लास बनाता है।
क्लास को अपने जावा प्रोजेक्ट में कॉपी करें।
JSON को अपनी क्लास में डीसीरियलाइज़ करने के लिए Jackson ObjectMapper का इस्तेमाल करें।
Java API डेवलपमेंट
- Spring RestTemplate के साथ REST रिस्पॉन्स को डीसीरियलाइज़ करें
- Spring Boot कंट्रोलर्स के लिए Jackson DTOs टाइप करें
- Jackson के साथ JSON कॉन्फ़िगरेशन को पार्स करें
एंटरप्राइज़ जावा
- Kafka कंज्यूमर्स में JSON पेलोड्स को मैप करें
- माइक्रोसर्विसेज़ के लिए डेटा ट्रांसफर ऑब्जेक्ट्स को परिभाषित करें।
- Java सर्विसेज़ में वेबहुक पेलोड्स को पार्स करें
जावा इकोसिस्टम
- स्प्रिंग बूट
- जैक्सन
- क्वार्कस
- माइक्रोनॉट
- जकार्ता EE
क्लास लेवल पर `@JsonIgnoreProperties(ignoreUnknown = true)` जोड़ें ताकि उन JSON रिस्पॉन्स को आसानी से हैंडल किया जा सके जिनमें ऐसे अतिरिक्त फ़ील्ड हों जो आपके POJO में परिभाषित नहीं हैं।
null JSON वैल्यूज़ को सही ढंग से हैंडल करने के लिए int, double और boolean के बजाय Integer, Double और Boolean (boxed types) का इस्तेमाल करें।
JSON में जो फ़ील्ड null हो सकते हैं, उनके लिए पक्का करें कि आप boxed types का इस्तेमाल करें — Java में int जैसे primitive types null को नहीं दिखा सकते।
सभी API रिस्पॉन्स POJO में `@JsonIgnoreProperties(ignoreUnknown = true)` जोड़ें, ताकि API में नए फ़ील्ड जुड़ने पर कोई गड़बड़ी न हो।
JSON में उन सभी फ़ील्ड्स के लिए प्रिमिटिव्स (primitives) के बजाय बॉक्स्ड टाइप्स (Integer, Double, Boolean) का इस्तेमाल करें जो संभावित रूप से null हो सकते हैं।
boilerplate getters, setters, equals, hashCode और toString मेथड्स को हटाने के लिए Lombok @Data जोड़ने पर विचार करें।
अक्सर पूछे जाने वाले सवाल
हमारे टूल्स और सेवाओं के बारे में आम सवालों के जवाब पाएँ।
JSON से Java क्लास को समझना
एंटरप्राइज़ बैकएंड डेवलपमेंट के लिए Java सबसे ज़्यादा इस्तेमाल की जाने वाली भाषाओं में से एक है, और Java इकोसिस्टम में Jackson सबसे प्रमुख JSON सीरियलाइज़ेशन लाइब्रेरी है। Spring Boot सभी REST कंट्रोलर्स के लिए Jackson ObjectMapper को ऑटो-कॉन्फ़िगर करता है, जिससे Jackson-एनोटेटेड POJOs (Plain Old Java Objects) Spring एप्लिकेशन में रिक्वेस्ट और रिस्पॉन्स बॉडी टाइप को परिभाषित करने का स्टैंडर्ड तरीका बन जाते हैं। Quarkus और Micronaut, जो नए क्लाउड-नेटिव Java फ्रेमवर्क हैं, वे भी Jackson को एक फर्स्ट-क्लास JSON बाइंडिंग लाइब्रेरी के तौर पर सपोर्ट करते हैं। हर API पेलोड या JSON कॉन्फ़िगरेशन स्ट्रक्चर के लिए Jackson-एनोटेटेड Java क्लास को हाथ से लिखना एक दोहराव वाला काम है, जिसमें फ़ील्ड, एनोटेशन, गेटर, सेटर और कंस्ट्रक्टर बनाना शामिल है — ये सभी चीज़ें एक JSON उदाहरण से अपने-आप बनाई जा सकती हैं।
Jackson का @JsonProperty एनोटेशन एक Java फ़ील्ड को एक खास JSON की (key) के नाम से मैप करता है। इससे Java के camelCase फ़ील्ड नेमिंग कन्वेंशन और JSON API के camelCase, snake_case या दूसरे कन्वेंशन एक साथ इस्तेमाल किए जा सकते हैं। जब किसी JSON ऑब्जेक्ट में user_id जैसी की (key) होती है, तो उससे जुड़े Java फ़ील्ड का नाम userId रखा जा सकता है और साथ में @JsonProperty("user_id") का इस्तेमाल किया जा सकता है। इससे Java की नेमिंग स्टाइल भी बनी रहती है और JSON की (key) से डेटा को सही ढंग से डीसीरियलाइज़ (deserialize) भी किया जा सकता है। क्लास-लेवल का एनोटेशन @JsonIgnoreProperties(ignoreUnknown = true) एक ज़रूरी डिफेंसिव एनोटेशन है। यह तब डीसीरियलाइज़ेशन में आने वाली गड़बड़ियों को रोकता है जब API ऐसे नए फ़ील्ड जोड़ता है जो Java क्लास में पहले से तय नहीं किए गए हैं — लंबे समय तक चलने वाले API क्लाइंट्स में बैकवर्ड कम्पैटिबिलिटी बनाए रखने के लिए यह बहुत ज़रूरी है।
Java के टाइप सिस्टम में प्रिमिटिव टाइप (int, double, boolean) और उनके बॉक्स किए गए ऑब्जेक्ट इक्विवेलेंट (Integer, Double, Boolean) के बीच साफ़ अंतर होना ज़रूरी है। यह अंतर JSON डीसीरियलाइज़ेशन के लिए बहुत ज़रूरी है क्योंकि JSON null, Java null रेफरेंस से मैप होता है — और null को प्रिमिटिव टाइप में असाइन नहीं किया जा सकता। जब किसी JSON फ़ील्ड में null वैल्यू हो सकती है, तो डीसीरियलाइज़ेशन के दौरान NullPointerException से बचने के लिए संबंधित Java फ़ील्ड में बॉक्स किए गए टाइप का इस्तेमाल करना चाहिए। जनरेटर उन सभी फ़ील्ड के लिए बॉक्स किए गए टाइप का इस्तेमाल करता है जिनकी सैंपल JSON में नॉन-null वैल्यू होती है, क्योंकि यह मानकर चला जाता है कि प्रोडक्शन डेटा में null हो सकता है। प्रिमिटिव टाइप का इस्तेमाल सिर्फ़ उन फ़ील्ड के लिए किया जाना चाहिए जिनके लिए नॉन-null होने की गारंटी हो।
यह JSON से Java क्लास जनरेटर, Jackson-एनोटेटेड POJO क्लास बनाता है जिनमें @JsonProperty एनोटेशन, सही Java बॉक्स्ड टाइप वाले प्राइवेट फील्ड और JavaBeans-स्टाइल के गेटर और सेटर मेथड होते हैं। नेस्टेड JSON ऑब्जेक्ट, रूट क्लास के अंदर नेस्टेड इनर स्टैटिक क्लास डेफ़िनिशन बन जाते हैं, जिससे सभी संबंधित टाइप एक ही कंपाइलेशन यूनिट में रहते हैं और एनकैप्सुलेशन भी बना रहता है। JSON ऐरे के लिए सही एलिमेंट टाइप के साथ List<T> का इस्तेमाल किया जाता है। जेनरेट किए गए कोड को सीधे Java प्रोजेक्ट में पेस्ट किया जा सकता है और Jackson Databind डिपेंडेंसी होने पर तुरंत कंपाइल किया जा सकता है। जो प्रोजेक्ट बॉयलरप्लेट कोड को और कम करना चाहते हैं, वे गेटर और सेटर मेथड की जगह Lombok एनोटेशन — @Data, @Getter, या @Setter — का इस्तेमाल कर सकते हैं, बिना इसके कि सीरियलइज़ेशन का मूल व्यवहार बदले।