JSON to Python

JSON से Python dataclass जनरेट करें

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

JSON इनपुट

Python आउटपुट

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

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

JSON से Python dataclass रूपांतरण एक कच्चे JSON ऑब्जेक्ट को लेकर सटीक टाइप एनोटेशन सहित Python dataclass परिभाषाओं का समूह तैयार करता है। Python का dataclasses मॉड्यूल, जिसे PEP 557 (Python 3.7) में introduce किया गया, एनोटेटेड क्लास फ़ील्ड से __init__, __repr__ और __eq__ मेथड स्वतः जनरेट करता है। जब आप JSON APIs, कॉन्फ़िगरेशन फ़ाइलों या मैसेज क्यूज़ के साथ काम करते हैं, तो dataclass आपके डेटा को एक typed संरचना देते हैं जिसे editor और mypy जैसे type checker development के दौरान verify कर सकते हैं।

Python का json.loads() सामान्य dict और list लौटाता है। ये काम तो करते हैं, लेकिन इनमें कोई टाइप जानकारी नहीं होती: गलत वर्तनी वाली key error throw करने के बजाय None लौटाती है, और editor field name autocomplete नहीं कर सकता। Dataclass इस समस्या को हल करते हैं — प्रत्येक JSON कुंजी को एक नामित, typed फ़ील्ड से मैप करके। नेस्टेड JSON ऑब्जेक्ट अलग-अलग dataclass परिभाषाएँ बन जाते हैं, ऐरे List[T] एनोटेशन बन जाते हैं, और null मान Optional[T] बन जाते हैं जिनका डिफ़ॉल्ट None होता है।

ये परिभाषाएँ हाथ से लिखना एक boring काम है। आपको JSON पढ़ना होता है, प्रत्येक फ़ील्ड का प्रकार उसके मान से निर्धारित करना होता है, camelCase या snake_case कुंजियों को Python परंपराओं के अनुसार बदलना होता है, और nullable फ़ील्ड तथा मिश्रित-प्रकार ऐरे जैसे अपवाद संभालने होते हैं। एक कनवर्टर यह सब कुछ मिलीसेकंड में कर देता है। आप JSON चिपकाएँ, सही dataclass कोड पाएँ और आगे बढ़ें।

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

JSON संरचनाओं को हाथ से Python क्लास परिभाषाओं में अनुवाद करने का अर्थ है नमूना डेटा से प्रकार अनुमानित करना, फ़ील्ड को इस तरह क्रमबद्ध करना कि आवश्यक फ़ील्ड वैकल्पिक से पहले आएँ, और जब API बदले तो सब कुछ update करना। एक कनवर्टर यह बाधा हटा देता है।

Dataclass तुरंत जनरेट करें
अपना JSON चिपकाएँ और एक सेकंड से भी कम समय में typed Python dataclass परिभाषाएँ पाएँ। नेस्टेड ऑब्जेक्ट, सूचियाँ और वैकल्पिक फ़ील्ड स्वतः संभाले जाते हैं।
🔒
Data पूरी तरह Private
रूपांतरण पूरी तरह आपके ब्राउज़र में JavaScript के माध्यम से चलता है। आपका JSON कभी आपकी मशीन से बाहर नहीं जाता। API कुंजियाँ, टोकन और उपयोगकर्ता रिकॉर्ड निजी रहते हैं।
📝
सटीक टाइप एनोटेशन
प्रत्येक जनरेटेड फ़ील्ड में JSON मान से अनुमानित Python टाइप एनोटेशन होता है: str, int, float, bool, List[T], या null के लिए Optional[T]।
📦
इंस्टॉलेशन या साइनअप ज़रूरी नहीं
Page खोलें और JSON चिपकाएँ। Python environment की ज़रूरत नहीं, pip package install करने की ज़रूरत नहीं, account बनाने की ज़रूरत नहीं।

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

REST API क्लाइंट विकास
API प्रतिक्रिया नमूनों से dataclass जनरेट करें। किसी third-party REST endpoint से लौटाया गया JSON चिपकाएँ और requests या httpx के लिए तैयार type-safe Python क्लास पाएँ।
FastAPI अनुरोध/प्रतिक्रिया मॉडल
JSON पेलोड की संरचना से dataclass परिभाषाएँ जनरेट करें। उन्हें Pydantic मॉडल में बदलें और FastAPI रूट हैंडलर में स्वचालित सत्यापन पाएँ।
डेटा पाइपलाइन स्कीमा
ETL पाइपलाइन के लिए typed रिकॉर्ड संरचनाएँ परिभाषित करें। Kafka, RabbitMQ, या SQS से एक नमूना JSON संदेश चिपकाएँ और अपेक्षित संरचना को दर्शाने वाले dataclass जनरेट करें।
कॉन्फ़िगरेशन फ़ाइल पार्सिंग
JSON कॉन्फ़िग फ़ाइलों को typed Python क्लास में बदलें। json.load() से अपना कॉन्फ़िग लोड करें, फिर editor autocomplete और type checking के लिए एक dataclass instance बनाएँ।
परीक्षण फ़िक्सचर जनरेशन
नमूना JSON डेटा से typed फ़िक्सचर बनाएँ। QA इंजीनियर API response snapshots चिपकाकर pytest test suite में use के लिए dataclass परिभाषाएँ तैयार कर सकते हैं।
Python टाइप एनोटेशन सीखना
छात्र कोई भी JSON संरचना चिपकाकर देख सकते हैं कि Python उसे टाइप संकेतों के साथ कैसे दर्शाता है। जनरेटेड कोड में List, Optional, नेस्टेड क्लास और संदर्भ में डिफ़ॉल्ट मान दिखते हैं।

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

प्रत्येक JSON मान एक विशिष्ट Python टाइप एनोटेशन से संगत होता है। नीचे दी गई तालिका दर्शाती है कि कनवर्टर प्रत्येक JSON प्रकार को कैसे अनुवाद करता है — typing मॉड्यूल वाक्यरचना (Python 3.7+) और Python 3.10 से उपलब्ध अंतर्निर्मित वाक्यरचना, दोनों के साथ।

JSON प्रकारउदाहरणPython (typing)Python 3.10+
string"hello"strstr
number (integer)42intint
number (float)3.14floatfloat
booleantrueboolbool
nullnullOptional[str]str | None
object{"k": "v"}@dataclass classnested model
array of strings["a", "b"]List[str]list[str]
array of objects[{"id": 1}]List[Item]list[Item]
mixed array[1, "a"]List[Any]list[Any]

Dataclass Decorator संदर्भ

@dataclass decorator कई पैरामीटर स्वीकार करता है जो जनरेटेड क्लास के व्यवहार को बदलते हैं। यह संदर्भ उन विकल्पों को कवर करता है जो JSON-व्युत्पन्न डेटा के साथ कार्य करते समय सबसे अधिक प्रासंगिक हैं।

Decorator / Fieldव्यवहारकब उपयोग करें
@dataclassGenerates __init__, __repr__, __eq__ from field annotationsStandard dataclasses
@dataclass(frozen=True)Makes instances immutable (hashable, no attribute reassignment)Config objects, dict keys
@dataclass(slots=True)Uses __slots__ for lower memory and faster attribute accessPython 3.10+, large datasets
@dataclass(kw_only=True)All fields require keyword arguments in __init__Python 3.10+, many fields
field(default_factory=list)Sets a mutable default without sharing state between instancesList/dict/set defaults

dataclass बनाम Pydantic बनाम TypedDict

JSON से typed संरचनाएँ परिभाषित करने के Python में तीन सामान्य तरीके हैं। प्रत्येक अलग उपयोग के मामले के लिए उपयुक्त है। Dataclass बिना किसी निर्भरता वाला मानक लाइब्रेरी विकल्प है। Pydantic रनटाइम सत्यापन जोड़ता है। TypedDict नई क्लास बनाए बिना सामान्य dict को एनोटेट करता है।

@dataclass
मानक लाइब्रेरी (Python 3.7+)। __init__, __repr__ और __eq__ जनरेट करता है। रनटाइम सत्यापन नहीं। क्रमबद्धता के लिए mypy और dataclasses-json के साथ काम करता है। आंतरिक डेटा संरचनाओं के लिए सर्वोत्तम जहाँ आप इनपुट नियंत्रित करते हैं।
BaseModel (Pydantic)
तृतीय-पक्ष लाइब्रेरी। रनटाइम पर प्रकारों और प्रतिबंधों को सत्यापित करती है। model_validate_json() के ज़रिए JSON सीधे पार्स करती है। FastAPI, सेटिंग्स प्रबंधन और किसी भी ऐसे कोड के लिए मानक विकल्प जो अविश्वसनीय इनपुट प्राप्त करता है।
TypedDict
मानक लाइब्रेरी (Python 3.8+)। सामान्य dict में टाइप संकेत जोड़ती है। कोई __init__ या मेथड जनरेट नहीं होते। मान सामान्य dict एक्सेस के रूप में बने रहते हैं। तब उपयोग करें जब आपको टाइप जाँच चाहिए लेकिन dict इंटरफ़ेस बनाए रखना हो, जैसे पुराने कोडबेस में।

कोड उदाहरण

ये उदाहरण दर्शाते हैं कि Python में जनरेटेड dataclass का उपयोग कैसे करें, JavaScript से प्रोग्रामेटिक रूप से कैसे बनाएँ, और Pydantic तथा CLI उपकरणों जैसे वैकल्पिक तरीकों का उपयोग कैसे करें।

Python (dataclasses)
from dataclasses import dataclass
from typing import List, Optional
import json

@dataclass
class Address:
    street: str
    city: str
    zip: str

@dataclass
class User:
    id: int
    name: str
    email: str
    active: bool
    score: float
    address: Address
    tags: List[str]
    metadata: Optional[str] = None

raw = '{"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"],"metadata":null}'
data = json.loads(raw)

# Reconstruct nested objects manually
addr = Address(**data["address"])
user = User(**{**data, "address": addr})
print(user.name)     # -> Alice
print(user.address)  # -> Address(street='123 Main St', city='Springfield', zip='12345')
JavaScript (generate Python from JSON)
// Minimal JSON-to-Python-dataclass generator in JS
function jsonToPython(obj, name = "Root") {
  const classes = [];
  function infer(val, fieldName) {
    if (val === null) return "Optional[str]";
    if (typeof val === "string") return "str";
    if (typeof val === "number") return Number.isInteger(val) ? "int" : "float";
    if (typeof val === "boolean") return "bool";
    if (Array.isArray(val)) {
      const first = val.find(v => v !== null);
      return first ? `List[${infer(first, fieldName + "Item")}]` : "List[Any]";
    }
    if (typeof val === "object") {
      const clsName = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
      build(val, clsName);
      return clsName;
    }
    return "Any";
  }
  function build(obj, cls) {
    const fields = Object.entries(obj).map(([k, v]) => `    ${k}: ${infer(v, k)}`);
    classes.push(`@dataclass\nclass ${cls}:\n${fields.join("\n")}`);
  }
  build(obj, name);
  return classes.join("\n\n");
}

const data = { id: 1, name: "Alice", scores: [98, 85] };
console.log(jsonToPython(data, "User"));
// @dataclass
// class User:
//     id: int
//     name: str
//     scores: List[int]
Python (Pydantic BaseModel alternative)
from pydantic import BaseModel
from typing import List, Optional

class Address(BaseModel):
    street: str
    city: str
    zip: str

class User(BaseModel):
    id: int
    name: str
    email: str
    active: bool
    score: float
    address: Address
    tags: List[str]
    metadata: Optional[str] = None

# Pydantic parses and validates JSON in one step
raw = '{"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"],"metadata":null}'
user = User.model_validate_json(raw)
print(user.name)              # -> Alice
print(user.model_dump_json()) # -> re-serializes to JSON
CLI (datamodel-code-generator)
# Install the generator
pip install datamodel-code-generator

# Generate dataclasses from a JSON file
datamodel-codegen --input data.json --output models.py --output-model-type dataclasses.dataclass

# Generate Pydantic models instead
datamodel-codegen --input data.json --output models.py

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice", "tags": ["admin"]}' | \
  datamodel-codegen --output-model-type dataclasses.dataclass
# Output:
# @dataclass
# class Model:
#     id: int
#     name: str
#     tags: List[str]

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

Python dataclass और सामान्य क्लास में क्या अंतर है?
Dataclass @dataclass decorator का उपयोग करके फ़ील्ड एनोटेशन से __init__, __repr__ और __eq__ मेथड स्वतः जनरेट करता है। सामान्य क्लास में ये मेथड आपको स्वयं लिखने होते हैं। Dataclass उस बॉयलरप्लेट को कम करते हैं जब क्लास मुख्यतः डेटा संग्रहीत करती है — जो JSON-व्युत्पन्न संरचनाओं का सामान्य मामला है।
क्या मैं dataclass को JSON क्रमबद्धता के साथ सीधे उपयोग कर सकता हूँ?
मानक लाइब्रेरी का json मॉड्यूल dataclass इंस्टेंस को डिफ़ॉल्ट रूप से क्रमबद्ध नहीं कर सकता। dataclasses.asdict() से dataclass को dict में बदलें, फिर उसे json.dumps() में दें। अधिक नियंत्रण के लिए, dataclasses-json लाइब्रेरी .to_json() और .from_json() मेथड जोड़ती है, और Pydantic मॉडल क्रमबद्धता को नेटिव रूप से संभालते हैं।
कनवर्टर नेस्टेड JSON ऑब्जेक्ट को कैसे संभालता है?
प्रत्येक नेस्टेड ऑब्जेक्ट एक अलग @dataclass परिभाषा बन जाता है। यदि "address" नामक JSON फ़ील्ड में "street" और "city" वाला ऑब्जेक्ट है, तो कनवर्टर एक Address dataclass बनाता है और मूल फ़ील्ड को address: Address के रूप में एनोटेट करता है। गहरी नेस्टेड संरचनाएँ निर्भरता क्रम में अनेक dataclass परिभाषाएँ उत्पन्न करती हैं।
JSON फ़ील्ड null होने पर क्या होता है?
Null फ़ील्ड को Optional[str] (या संदर्भ से अनुमानित उचित प्रकार) के रूप में डिफ़ॉल्ट मान None के साथ एनोटेट किया जाता है। Dataclass में डिफ़ॉल्ट वाले फ़ील्ड आवश्यक फ़ील्ड के बाद आने चाहिए, इसलिए कनवर्टर वैकल्पिक फ़ील्ड क्लास परिभाषा के अंत में रखता है।
JSON के लिए dataclass और Pydantic मॉडल में क्या अंतर है?
Dataclass मानक लाइब्रेरी का हिस्सा हैं और रनटाइम पर डेटा सत्यापित नहीं करते। Pydantic मॉडल प्रकारों को सत्यापित करते हैं, प्रतिबंध लागू करते हैं और raw JSON स्ट्रिंग सीधे पार्स कर सकते हैं। यदि आप बाहरी स्रोतों से JSON प्राप्त करते हैं और अनुचित डेटा अस्वीकार करना चाहते हैं, तो Pydantic बेहतर विकल्प है। आंतरिक डेटा पासिंग के लिए जहाँ आप इनपुट पर विश्वास करते हैं, dataclass हल्के हैं और बाहरी निर्भरताएँ नहीं हैं।
Python dataclass में camelCase JSON कुंजियाँ कैसे संभालें?
Python परंपरा variable नामों के लिए snake_case का उपयोग करती है। कनवर्टर "firstName" जैसी camelCase keys को first_name जैसे snake_case fields में convert करता है। यदि आपको JSON से वापस क्रम-रद्द करना हो, तो dataclasses-json लाइब्रेरी को उस config के साथ उपयोग करें जो दोनों नामकरण परंपराओं के बीच मैप करती है, या एक कस्टम __post_init__ मेथड लिखें।
क्या यह कनवर्टर Python 3.10+ वाक्यरचना जैसे List[str] के बजाय list[str] का समर्थन करता है?
कनवर्टर Python 3.7 से 3.12 तक maximum compatibility के लिए typing module imports (List, Optional) जनरेट करता है। यदि आपका प्रोजेक्ट Python 3.10 या बाद के संस्करण को लक्षित करता है, तो आप List[str] को list[str] और Optional[str] को str | None से सुरक्षित रूप से बदल सकते हैं। ऊपर की टाइप मैपिंग तालिका दोनों रूप दर्शाती है।