JSON to Java

JSON से Java POJO क्लास जनरेट करें

उदाहरण देखें
रूट क्लास का नाम:

JSON इनपुट

Java आउटपुट

स्थानीय रूप से चलता है · सीक्रेट पेस्ट करना सुरक्षित है
Java क्लास यहाँ दिखेंगी…

JSON से Java क्लास रूपांतरण क्या है?

JSON से Java क्लास रूपांतरण एक कच्चे JSON ऑब्जेक्ट को लेकर निजी फ़ील्ड, getter और setter सहित Plain Old Java Object (POJO) परिभाषाएँ तैयार करता है। Java में कोई अंतर्निर्मित JSON टाइप प्रणाली नहीं है, इसलिए प्रत्येक JSON API प्रतिक्रिया, कॉन्फ़िगरेशन फ़ाइल या मैसेज पेलोड के लिए एक संगत क्लास की आवश्यकता होती है — तभी आप उसे टाइप-सुरक्षित तरीके से उपयोग कर सकते हैं। Jackson और Gson जैसी लाइब्रेरी reflection के माध्यम से JSON कुंजियों को Java फ़ील्ड से जोड़ती हैं, लेकिन इसके लिए क्लास परिभाषाओं का पहले से मौजूद होना आवश्यक है।

JSON डीसीरियलाइज़ेशन के लिए एक मानक Java POJO प्रत्येक JSON कुंजी के लिए एक निजी फ़ील्ड, एक no-arg constructor, और प्रत्येक फ़ील्ड के लिए getter/setter घोषित करता है। नेस्टेड JSON ऑब्जेक्ट अलग-अलग क्लास बन जाते हैं। ऐरे, java.util.List आयात के साथ List<T> फ़ील्ड बन जाते हैं। JSON के प्राथमिक प्रकार Java के प्राथमिक प्रकारों (int, double, boolean) या जेनेरिक के भीतर उनके रैपर प्रकारों (Integer, Double, Boolean) से संगत होते हैं। Null मान सामान्यतः Object या एक nullable संदर्भ प्रकार से संगत होते हैं।

ये क्लास परिभाषाएँ हाथ से लिखना एक दोहराव भरा काम है। आपको प्रत्येक JSON कुंजी पढ़नी होती है, मान से Java प्रकार निर्धारित करना होता है, camelCase JSON से camelCase Java फ़ील्ड में नामकरण परंपरा बदलनी होती है, नेस्टेड ऑब्जेक्ट के लिए PascalCase क्लास नाम बनाने होते हैं, और getter/setter का बॉयलरप्लेट जोड़ना होता है। 15 फ़ील्ड और 3 नेस्टेड ऑब्जेक्ट वाले JSON के लिए इसका अर्थ है 4 क्लास, 30 से अधिक मेथड लिखना और सब कुछ एक समान बनाए रखना। एक कनवर्टर यह काम मिलीसेकंड में कर देता है।

JSON to Java कनवर्टर का उपयोग क्यों करें?

JSON से Java POJO हाथ से बनाने का अर्थ है प्रत्येक फ़ील्ड की जाँच करना, नमूना मानों से प्रकार अनुमानित करना, getter/setter लिखना, और प्रत्येक नेस्टेड ऑब्जेक्ट के लिए यही प्रक्रिया दोहराना। जब API contract बदले, तो सब कुछ हाथ से update करें। एक कनवर्टर यह repetitive काम समाप्त कर देता है।

तत्काल POJO जनरेशन
अपना JSON चिपकाएँ और एक सेकंड से भी कम समय में संपूर्ण Java क्लास परिभाषाएँ पाएँ। नेस्टेड ऑब्जेक्ट, सूचियाँ और प्राथमिक प्रकार स्वतः पहचाने और संगत किए जाते हैं।
🔒
Data पूरी तरह निजी
रूपांतरण पूरी तरह आपके ब्राउज़र में JavaScript के माध्यम से चलता है। आपका JSON कभी आपकी मशीन से बाहर नहीं जाता। API कुंजियाँ, टोकन और उत्पादन डेटा निजी रहते हैं।
📝
सटीक प्रकार अनुमान
प्रत्येक जनरेटेड फ़ील्ड JSON मान से अनुमानित उचित Java प्रकार का उपयोग करती है: String, int, double, boolean, List<T>, या null के लिए Object। जेनेरिक के भीतर रैपर प्रकारों का उपयोग किया जाता है।
📦
इंस्टॉलेशन या साइनअप ज़रूरी नहीं
पेज खोलें और JSON चिपकाएँ। JDK की आवश्यकता नहीं, Maven निर्भरताओं की आवश्यकता नहीं, खाते की आवश्यकता नहीं। ब्राउज़र वाले किसी भी उपकरण पर काम करता है।

JSON to Java के उपयोग के मामले

Spring Boot API विकास
API JSON नमूनों से request और response DTO जनरेट करें। अपेक्षित पेलोड संरचना चिपकाएँ और Spring नियंत्रकों में @RequestBody और @ResponseBody एनोटेशन के लिए तैयार Java क्लास पाएँ।
Android ऐप विकास
Retrofit या Volley नेटवर्क प्रतिक्रियाओं के लिए मॉडल क्लास बनाएँ। अपने बैकएंड API द्वारा लौटाया गया JSON चिपकाएँ और Gson या Moshi कनवर्टर के साथ संगत POJO पाएँ।
माइक्रोसर्विस एकीकरण
Kafka, RabbitMQ, या gRPC JSON पेलोड के लिए टाइप युक्त मैसेज क्लास परिभाषित करें। एक नमूना संदेश चिपकाएँ और ऐसे POJO जनरेट करें जो सेवाओं के बीच अपेक्षित अनुबंध को दर्शाते हों।
Legacy सिस्टम Migration
टाइप युक्त क्लाइंट में REST एंडपॉइंट लपेटते समय JSON API प्रतिक्रियाओं को Java क्लास में बदलें। loosely-typed Map<String, Object> पैटर्न से proper domain model की ओर migrate करते समय उपयोगी।
QA और Test Automation
API प्रतिक्रिया नमूनों से टाइप युक्त परीक्षण फ़िक्सचर बनाएँ। QA इंजीनियर वास्तविक JSON प्रतिक्रियाएँ चिपकाकर JUnit या TestNG परीक्षण सूट में AssertJ अभिकथन के साथ उपयोग के लिए POJO परिभाषाएँ तैयार कर सकते हैं।
Java OOP पैटर्न सीखना
छात्र कोई भी JSON संरचना चिपकाकर देख सकते हैं कि Java उसे क्लास, फ़ील्ड, getter, setter और नेस्टेड प्रकारों के साथ कैसे दर्शाता है। आउटपुट इसे अमूर्त की बजाय ठोस बनाता है।

JSON से Java टाइप मैपिंग

प्रत्येक JSON मान एक विशिष्ट Java प्रकार से संगत होता है। नीचे दी गई तालिका दर्शाती है कि कनवर्टर प्रत्येक JSON प्रकार को उसके Java समतुल्य में कैसे अनुवाद करता है। वैकल्पिक स्तंभ List<T> जैसे जेनेरिक संदर्भों में उपयोग किए जाने वाले रैपर प्रकार, या Records जैसी नई Java सुविधाएँ दर्शाता है।

JSON प्रकारउदाहरणJava प्रकारविकल्प
string"hello"StringString
number (integer)42intint / Integer
number (float)3.14doubledouble / Double
booleantruebooleanboolean / Boolean
nullnullObjectObject (or @Nullable String)
object{"k": "v"}NestedClassRecord (Java 16+)
array of strings["a", "b"]List<String>List<String>
array of objects[{"id": 1}]List<Item>List<Item>
mixed array[1, "a"]List<Object>List<Object>

Java JSON एनोटेशन संदर्भ

Jackson या Gson से JSON डीसीरियलाइज़ करते समय, एनोटेशन नियंत्रित करते हैं कि JSON कुंजियाँ Java फ़ील्ड से कैसे संगत होती हैं, अज्ञात फ़ील्ड कैसे संभाले जाते हैं, और null मानों का उपचार कैसे होता है। यह संदर्भ उन एनोटेशन को कवर करता है जो जनरेटेड POJO के साथ काम करते समय सबसे अधिक मिलते हैं।

एनोटेशनउद्देश्यलाइब्रेरी
@JsonProperty("name")Maps a JSON key to a Java field with a different nameJackson
@SerializedName("name")Same as @JsonProperty, but for the Gson libraryGson
@JsonIgnorePropertiesIgnores unknown JSON keys during deserialization instead of failingJackson
@NullableMarks a field as accepting null values from JSON inputJSR 305 / JetBrains
@NotNullEnforces that a field must not be null, throws on violationBean Validation
@JsonFormat(pattern=...)Defines a date/time format for serialization and deserializationJackson

POJO बनाम Record बनाम Lombok

Java में JSON डेटा रखने के लिए टाइप युक्त संरचनाएँ परिभाषित करने के तीन सामान्य तरीके हैं। प्रत्येक अलग परियोजना शैली और Java संस्करण के लिए उपयुक्त है। POJO सबसे व्यापक संगतता वाला परंपरागत पैटर्न है। Record अपरिवर्तनीय डेटा के लिए बॉयलरप्लेट कम करता है। Lombok एनोटेशन के माध्यम से संकलन समय पर getter, setter और कंस्ट्रक्टर जनरेट करता है।

POJO
परंपरागत Java पैटर्न। Java 8+ के साथ काम करता है। आप निजी फ़ील्ड और getter/setter मेथड परिभाषित करते हैं। परिवर्तनीयता और कस्टम तर्क पर पूर्ण नियंत्रण। प्रत्येक JSON लाइब्रेरी (Jackson, Gson, Moshi) के साथ संगत। Spring Boot, Android और उद्यम कोडबेस के लिए मानक विकल्प।
Record (Java 16+)
Java 16 से अंतर्निर्मित (14 में पूर्वावलोकन)। संक्षिप्त वाक्यरचना: record User(int id, String name) कंस्ट्रक्टर, accessor, equals, hashCode और toString जनरेट करता है। इंस्टेंस अपरिवर्तनीय होते हैं। Jackson संस्करण 2.12 से Record का समर्थन करता है। उन value objects और DTO के लिए सर्वोत्तम जहाँ setter की आवश्यकता नहीं।
Lombok @Data
तृतीय-पक्ष संकलन-समय एनोटेशन प्रोसेसर। @Data getter, setter, equals, hashCode और toString जनरेट करता है। @Builder एक builder पैटर्न जोड़ता है। परिवर्तनीयता बनाए रखते हुए बॉयलरप्लेट को Record के निकट स्तर तक कम करता है। आपके निर्माण उपकरण (Maven/Gradle) और IDE प्लगइन में Lombok जोड़ना आवश्यक है।

कोड उदाहरण

ये उदाहरण दर्शाते हैं कि डीसीरियलाइज़ेशन के लिए Jackson के साथ जनरेटेड Java POJO का उपयोग कैसे करें, JavaScript और Python से प्रोग्रामेटिक रूप से Java क्लास कैसे बनाएँ, और बैच जनरेशन के लिए jsonschema2pojo CLI टूल का उपयोग कैसे करें।

Java (Jackson deserialization)
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;
    private String email;
    private boolean active;
    private double score;
    private Address address;
    private List<String> tags;

    // getters and setters omitted for brevity

    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Alice\",\"email\":\"alice@example.com\",\"active\":true,\"score\":98.5,\"address\":{\"street\":\"123 Main St\",\"city\":\"Springfield\",\"zip\":\"12345\"},\"tags\":[\"admin\",\"user\"]}";
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);
        System.out.println(user.getName()); // -> Alice
    }
}

class Address {
    private String street;
    private String city;
    private String zip;
    // getters and setters
}
JavaScript (generate Java POJO from JSON)
// Minimal JSON-to-Java-POJO generator in JS
function jsonToJava(obj, name = "Root") {
  const classes = [];
  function infer(val, fieldName) {
    if (val === null) return "Object";
    if (typeof val === "string") return "String";
    if (typeof val === "number") return Number.isInteger(val) ? "int" : "double";
    if (typeof val === "boolean") return "boolean";
    if (Array.isArray(val)) {
      const first = val.find(v => v !== null);
      if (!first) return "List<Object>";
      const elem = infer(first, fieldName);
      const boxed = elem === "int" ? "Integer" : elem === "double" ? "Double" : elem === "boolean" ? "Boolean" : elem;
      return `List<${boxed}>`;
    }
    if (typeof val === "object") {
      const cls = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
      build(val, cls);
      return cls;
    }
    return "Object";
  }
  function build(obj, cls) {
    const fields = Object.entries(obj).map(([k, v]) => {
      const type = infer(v, k);
      return `    private ${type} ${k};`;
    });
    classes.push(`public class ${cls} {\n${fields.join("\n")}\n}`);
  }
  build(obj, name);
  return classes.join("\n\n");
}

console.log(jsonToJava({ id: 1, name: "Alice", scores: [98, 85] }, "User"));
// public class User {
//     private int id;
//     private String name;
//     private List<Integer> scores;
// }
Python (generate Java classes from JSON)
import json

def json_to_java(obj: dict, class_name: str = "Root") -> str:
    classes = []

    def infer(val, name):
        if val is None:
            return "Object"
        if isinstance(val, bool):
            return "boolean"
        if isinstance(val, int):
            return "int"
        if isinstance(val, float):
            return "double"
        if isinstance(val, str):
            return "String"
        if isinstance(val, list):
            if not val:
                return "List<Object>"
            elem = infer(val[0], name)
            boxed = {"int": "Integer", "double": "Double", "boolean": "Boolean"}.get(elem, elem)
            return f"List<{boxed}>"
        if isinstance(val, dict):
            cls = name[0].upper() + name[1:]
            build(val, cls)
            return cls
        return "Object"

    def build(obj, cls):
        fields = [f"    private {infer(v, k)} {k};" for k, v in obj.items()]
        classes.append(f"public class {cls} {{\n" + "\n".join(fields) + "\n}")

    build(obj, class_name)
    return "\n\n".join(classes)

data = json.loads('{"id": 1, "name": "Alice", "tags": ["admin"]}')
print(json_to_java(data, "User"))
# public class User {
#     private int id;
#     private String name;
#     private List<String> tags;
# }
CLI (jsonschema2pojo)
# Install jsonschema2pojo (requires Java 8+)
# Download from https://github.com/joelittlejohn/jsonschema2pojo

# Generate POJOs from a JSON file
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style jackson2

# Generate with Gson annotations instead
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style gson

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice", "tags": ["admin"]}' | \
  jsonschema2pojo --source-type json --annotation-style jackson2 \
  --target src/main/java --target-package com.example.model

अक्सर पूछे जाने वाले प्रश्न

POJO और Java Bean में क्या अंतर है?
POJO (Plain Old Java Object) कोई भी सरल Java क्लास है जिसमें किसी फ़्रेमवर्क की निर्भरता नहीं होती। Java Bean एक POJO है जो विशिष्ट परंपराओं का पालन करता है: बिना-तर्क का कंस्ट्रक्टर, सार्वजनिक getter और setter के साथ निजी फ़ील्ड, और Serializable का कार्यान्वयन। JSON मैपिंग के लिए अधिकांश लाइब्रेरी Bean परंपराओं (getter/setter) की आवश्यकता रखती हैं लेकिन Serializable की नहीं। इस टूल द्वारा जनरेटेड क्लास Bean getter/setter पैटर्न का पालन करती हैं।
जनरेटेड POJO के साथ कौन सी JSON लाइब्रेरी उपयोग करनी चाहिए?
Jackson (com.fasterxml.jackson) सबसे व्यापक रूप से उपयोग की जाने वाली Java JSON लाइब्रेरी है और Spring Boot में डिफ़ॉल्ट है। Gson (com.google.gson) Android परियोजनाओं में लोकप्रिय है और इसका API सरल है। Moshi, Square की एक नई लाइब्रेरी है जो Kotlin अंतरसंचालनीयता के लिए बनाई गई है। तीनों getter और setter वाले मानक POJO के साथ काम करती हैं।
कनवर्टर नेस्टेड JSON ऑब्जेक्ट को कैसे संभालता है?
प्रत्येक नेस्टेड ऑब्जेक्ट एक अलग Java क्लास बन जाता है। यदि "address" नामक JSON फ़ील्ड में "street" और "city" कुंजियों वाला ऑब्जेक्ट है, तो कनवर्टर उन फ़ील्ड के साथ एक Address क्लास बनाता है और मूल फ़ील्ड का प्रकार Address निर्धारित करता है। गहरी नेस्टेड संरचनाएँ अनेक क्लास परिभाषाएँ उत्पन्न करती हैं।
JSON फ़ील्ड null होने पर क्या होता है?
Null फ़ील्ड का प्रकार Object होता है क्योंकि कनवर्टर केवल null मान से expected type का अनुमान नहीं लगा सकता। व्यवहार में, जब आपको API अनुबंध पता हो तो आप Object को अपेक्षित प्रकार (String, Integer आदि) से बदल देंगे। Jackson का उपयोग करने पर, null मान डिफ़ॉल्ट रूप से बिना किसी त्रुटि के संदर्भ-प्रकार फ़ील्ड को सौंपे जाते हैं।
क्या JSON के लिए POJO की जगह Java Records उपयोग करने चाहिए?
Records उन अपरिवर्तनीय डेटा स्थानांतरण ऑब्जेक्ट के लिए उपयुक्त हैं जहाँ setter की आवश्यकता नहीं। Jackson संस्करण 2.12 से Records का समर्थन करता है, और Gson ने बाद के संस्करणों में समर्थन जोड़ा। यदि आपकी परियोजना Java 16+ पर चलती है और आप API प्रतिक्रियाओं को केवल-पठन डेटा मानते हैं, तो Records बॉयलरप्लेट कम करते हैं। यदि आपको परिवर्तनीयता चाहिए या Java 8/11 लक्षित करते हैं, तो POJO के साथ रहें।
ऐसी JSON कुंजियाँ कैसे संभालें जो वैध Java पहचानकर्ता नहीं हैं?
"first-name" या "2nd_place" जैसी JSON कुंजियाँ वैध Java फ़ील्ड नाम नहीं हैं। Jackson में @JsonProperty("first-name") या Gson में @SerializedName("first-name") का उपयोग करके JSON कुंजी को firstName जैसे वैध Java फ़ील्ड नाम से संगत करें। कनवर्टर स्वतः कुंजी नामों को camelCase Java फ़ील्ड में बदलता है।
क्या JSON नमूने की बजाय JSON Schema से Java क्लास जनरेट कर सकते हैं?
यह टूल JSON डेटा नमूनों से क्लास जनरेट करता है। JSON Schema इनपुट के लिए jsonschema2pojo परियोजना (CLI टूल, Maven प्लगइन और Gradle प्लगइन के रूप में उपलब्ध) का उपयोग करें। यह एक JSON Schema फ़ाइल पढ़कर सत्यापन प्रतिबंध, डिफ़ॉल्ट मान और स्कीमा विवरण से दस्तावेज़ीकरण सहित एनोटेटेड Java क्लास उत्पन्न करता है।