ToolHub
View All Posts

JSON Schema सत्यापन गाइड: अपने डेटा संरचनाओं को मान्य करें

बाहरी स्रोतों से डेटा प्राप्त करने वाला प्रत्येक एप्लिकेशन एक ही मूलभूत प्रश्न का सामना करता है: क्या मैं इस डेटा पर भरोसा कर सकता हूँ? चाहे API अनुरोध बॉडी हो, कॉन्फ़िगरेशन फ़ाइल, कतार संदेश या डेटा आयात, अविश्वसनीय डेटा को सिस्टम में प्रवेश करने से पहले मान्य किया जाना चाहिए। JSON Schema मान्य डेटा कैसा दिखता है इसे परिभाषित करने और आने वाले डेटा को उस परिभाषा के अनुरूप सत्यापित करने का एक मानकीकृत, भाषा-अज्ञेय तरीका प्रदान करता है। यह गाइड आपके पहले Schema लिखने से लेकर जटिल सत्यापन के उन्नत पैटर्न तक सब कुछ कवर करती है, व्यावहारिक उदाहरणों के साथ जिन्हें आप तुरंत लागू कर सकते हैं।

JSON Schema क्या है?

JSON Schema एक JSON दस्तावेज़ है जो अन्य JSON दस्तावेज़ों की संरचना और बाधाओं का वर्णन करता है। यह एक शब्दावली है जो आपको JSON डेटा को एनोटेट और मान्य करने की अनुमति देती है, जिसे इंटरनेट इंजीनियरिंग टास्क फोर्स (IETF) द्वारा मानकीकृत किया गया है। JSON Schema नियमों को परिभाषित करता है कि कौन से फ़ील्ड मौजूद होने चाहिए, वे किस प्रकार के होने चाहिए, कौन से मान स्वीकार्य हैं, और ऑब्जेक्ट और ऐरे कैसे संरचित होने चाहिए।

JSON Schema को अपने डेटा अनुबंध के रूप में सोचें। जैसे डेटाबेस Schema टेबल के कॉलम, प्रकार और बाधाओं को परिभाषित करता है, JSON Schema JSON दस्तावेज़ के गुणों, प्रकारों और बाधाओं को परिभाषित करता है। कोई भी JSON डेटा जो Schema में सभी बाधाओं को संतुष्ट करता है, मान्य इंस्टेंस कहलाता है, जबकि किसी भी बाधा का उल्लंघन करने वाला डेटा अमान्य है।

JSON Schema क्या नहीं है

JSON Schema संस्करण

JSON Schema कई ड्राफ्ट के माध्यम से विकसित हुआ है, प्रत्येक ने सुविधाएँ जोड़ी और शब्दावली को परिष्कृत किया। इन संस्करणों को समझने से आपको अपने प्रोजेक्ट के लिए सही संस्करण चुनने और संगतता समस्याओं से बचने में मदद मिलती है।

संस्करण$schema URIस्थितिमुख्य विशेषताएँ
Draft 2020-12https://json-schema.org/draft/2020-12/schemaवर्तमान संस्करणprefixItems, dynamicRef, शब्दावली समर्थन
Draft 2019-09https://json-schema.org/draft/2019-09/schemaस्थिरunevaluatedProperties, $recursiveRef
Draft 7http://json-schema.org/draft-07/schema#व्यापक रूप से समर्थितif/then/else, contentEncoding
Draft 6http://json-schema.org/draft-06/schema#विरासतpropertyNames, contains
Draft 4http://json-schema.org/draft-04/schema#पदावनतप्रारंभिक व्यापक रूप से अपनाया गया संस्करण
अनुशंसा: नए प्रोजेक्ट के लिए Draft 2020-12 का उपयोग करें। यह नवीनतम स्थिर संस्करण है जिसमें सबसे अधिक सुविधाएँ हैं, प्रमुख सत्यापन पुस्तकालयों द्वारा समर्थित। यदि मौजूदा उपकरणों के साथ अधिकतम संगतता की आवश्यकता है, तो Draft 7 एक सुरक्षित विकल्प है। Draft 4 और पुराने से बचें।

अपना पहला Schema लिखना

आइए एक सरल उदाहरण से शुरू करें: नाम, ईमेल और आयु वाले उपयोगकर्ता ऑब्जेक्ट के लिए एक Schema।

{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://example.com/schemas/user.json",
    "title": "User",
    "description": "A user account in the system",
    "type": "object",
    "properties": {
        "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "The user's full name"
        },
        "email": {
            "type": "string",
            "format": "email",
            "description": "The user's email address"
        },
        "age": {
            "type": "integer",
            "minimum": 0,
            "maximum": 150,
            "description": "The user's age in years"
        }
    },
    "required": ["name", "email"],
    "additionalProperties": false
}

यह Schema घोषित करता है कि एक मान्य उपयोगकर्ता एक ऑब्जेक्ट होना चाहिए जहाँ name और email आवश्यक स्ट्रिंग प्रॉपर्टीज़ हैं। age प्रॉपर्टी वैकल्पिक है, लेकिन यदि मौजूद है तो 0 और 150 के बीच पूर्णांक होना चाहिए। additionalProperties: false बाधा Schema में परिभाषित नहीं की गई किसी भी प्रॉपर्टी को रोकती है, जो टाइपो और अप्रत्याशित फ़ील्ड को पकड़ सकती है।

मुख्य कीवर्ड संदर्भ

JSON Schema बाधाओं को परिभाषित करने के लिए कीवर्ड की एक समृद्ध शब्दावली प्रदान करता है। यहाँ श्रेणी के अनुसार सबसे महत्वपूर्ण कीवर्ड हैं।

प्रकार कीवर्ड

कीवर्डविवरणउदाहरण
typeअपेक्षित डेटा प्रकार"type": "string" या "type": ["string", "null"]
enumअनुमत मानों की सूची"enum": ["active", "inactive", "pending"]
constइस सटीक मान के बराबर होना चाहिए"const": "v2"

संख्यात्मक बाधाएँ

कीवर्डविवरणउदाहरण
minimumन्यूनतम (समावेशी)"minimum": 0
exclusiveMinimumन्यूनतम (अनन्य)"exclusiveMinimum": 0
maximumअधिकतम (समावेशी)"maximum": 100
exclusiveMaximumअधिकतम (अनन्य)"exclusiveMaximum": 100
multipleOfइस मान का गुणज होना चाहिए"multipleOf": 0.01

स्ट्रिंग बाधाएँ

कीवर्डविवरणउदाहरण
minLengthन्यूनतम स्ट्रिंग लंबाई"minLength": 1
maxLengthअधिकतम स्ट्रिंग लंबाई"maxLength": 255
patternस्ट्रिंग को मिलान करने वाला रेगेक्स"pattern": "^[A-Z]{2}\\d{4}$"
formatसिमैंटिक प्रारूप (email, uri, date-time, आदि)"format": "email"

ऑब्जेक्ट बाधाएँ

कीवर्डविवरणउदाहरण
propertiesप्रत्येक ज्ञात प्रॉपर्टी के लिए Schema"properties": {"name": {"type": "string"}}
requiredआवश्यक प्रॉपर्टीज़ की सूची"required": ["name", "email"]
additionalPropertiesअतिरिक्त प्रॉपर्टीज़ की अनुमति है या नहीं"additionalProperties": false
minPropertiesन्यूनतम प्रॉपर्टी गणना"minProperties": 1
maxPropertiesअधिकतम प्रॉपर्टी गणना"maxProperties": 10
patternPropertiesरेगेक्स से मिलान करने वाली प्रॉपर्टीज़ के लिए Schema"patternProperties": {"^S_": {"type": "string"}}

ऐरे बाधाएँ

कीवर्डविवरणउदाहरण
itemsसभी ऐरे आइटम के लिए Schema"items": {"type": "string"}
prefixItemsस्थितीय आइटम के लिए Schema (Draft 2020-12)"prefixItems": [{"type": "string"}, {"type": "number"}]
minItemsन्यूनतम आइटम गणना"minItems": 1
maxItemsअधिकतम आइटम गणना"maxItems": 100
uniqueItemsसभी आइटम अद्वितीय होने चाहिए"uniqueItems": true

सामान्य Schema पैटर्न

वास्तविक दुनिया के Schema को अक्सर सरल प्रकार जाँच से परे पैटर्न की आवश्यकता होती है। यहाँ सबसे अधिक उपयोग किए जाने वाले पैटर्न हैं।

if/then/else के साथ सशर्त सत्यापन

प्रॉपर्टी मानों के आधार पर विभिन्न बाधाएँ लागू करने के लिए सशर्त लॉजिक का उपयोग करें। उदाहरण के लिए, भुगतान ऑब्जेक्ट को भुगतान विधि के आधार पर विभिन्न फ़ील्ड की आवश्यकता होती है।

{
    "type": "object",
    "properties": {
        "method": { "enum": ["credit_card", "bank_transfer"] },
        "card_number": { "type": "string" },
        "routing_number": { "type": "string" }
    },
    "required": ["method"],
    "if": {
        "properties": { "method": { "const": "credit_card" } }
    },
    "then": {
        "required": ["card_number"]
    },
    "else": {
        "required": ["routing_number"]
    }
}

allOf, anyOf, oneOf के साथ संयोजन

संयोजन कीवर्ड आपको शक्तिशाली तरीकों से Schema को संयोजित करने की अनुमति देते हैं:

{
    "oneOf": [
        {
            "type": "object",
            "properties": {
                "type": { "const": "email" },
                "address": { "type": "string", "format": "email" }
            },
            "required": ["type", "address"]
        },
        {
            "type": "object",
            "properties": {
                "type": { "const": "phone" },
                "number": { "type": "string", "pattern": "^\\+?[1-9]\\d{1,14}$" }
            },
            "required": ["type", "number"]
        }
    ]
}

$ref के साथ Schema पुन: उपयोग

$ref कीवर्ड आपको Schema को संदर्भित और पुन: उपयोग करने की अनुमति देता है, दोहराव को समाप्त करता है और Schema को रखरखाव योग्य रखता है। आप उसी दस्तावेज़ के भीतर या बाहरी फ़ाइलों में Schema को संदर्भित कर सकते हैं।

{
    "$id": "https://example.com/schemas/order.json",
    "type": "object",
    "properties": {
        "customer": { "$ref": "#/$defs/address" },
        "shipping": { "$ref": "#/$defs/address" },
        "billing": { "$ref": "#/$defs/address" },
        "items": {
            "type": "array",
            "items": { "$ref": "#/$defs/lineItem" },
            "minItems": 1
        }
    },
    "required": ["customer", "items"],
    "$defs": {
        "address": {
            "type": "object",
            "properties": {
                "street": { "type": "string" },
                "city": { "type": "string" },
                "zip": { "type": "string", "pattern": "^\\d{5}(-\\d{4})?$" },
                "country": { "type": "string", "minLength": 2, "maxLength": 2 }
            },
            "required": ["street", "city", "zip", "country"]
        },
        "lineItem": {
            "type": "object",
            "properties": {
                "product": { "type": "string" },
                "quantity": { "type": "integer", "minimum": 1 },
                "price": { "type": "number", "exclusiveMinimum": 0 }
            },
            "required": ["product", "quantity", "price"]
        }
    }
}

नल करने योग्य प्रकार

JSON Schema Draft 2020-12 में, नल करने योग्य प्रकारों को "null" शामिल करने वाले प्रकार ऐरे का उपयोग करके दर्शाया जाता है:

{
    "type": ["string", "null"],
    "description": "An optional display name, or null if not set"
}

पुराने ड्राफ्ट में, OpenAPI विनिर्देश ने nullable: true कीवर्ड का उपयोग किया था। मानक JSON Schema के लिए, हमेशा प्रकार ऐरे दृष्टिकोण का उपयोग करें।

प्रारूप सत्यापन

format कीवर्ड संरचनात्मक जाँच से परे सिमैंटिक सत्यापन प्रदान करता है। यह निर्दिष्ट करता है कि स्ट्रिंग को एक सुप्रसिद्ध प्रारूप के अनुरूप होना चाहिए। सामान्यतः समर्थित प्रारूपों में शामिल हैं:

प्रारूपविवरणउदाहरण
emailईमेल पताuser@example.com
uriमान्य URIhttps://example.com/path
uri-referenceURI या सापेक्ष संदर्भ/path/to/resource
date-timeISO 8601 दिनांक-समय2026-05-19T14:30:00Z
dateISO 8601 दिनांक2026-05-19
timeISO 8601 समय14:30:00Z
ipv4IPv4 पता192.168.1.1
ipv6IPv6 पता::1
uuidयूनिवर्सली यूनिक आइडेंटिफ़ायर550e8400-e29b-41d4-a716-446655440000
hostnameइंटरनेट होस्टनामwww.example.com
महत्वपूर्ण: डिफ़ॉल्ट रूप से, format कीवर्ड एक एनोटेशन है, बाधा नहीं। सत्यापनकर्ता इसे अनदेखा कर सकते हैं जब तक कि आप स्पष्ट रूप से प्रारूप सत्यापन सक्षम न करें। Ajv में, प्रारूप जाँच लागू करने के लिए { strict: true } या { validateFormats: true } पास करें। हमेशा सत्यापित करें कि आपका सत्यापनकर्ता प्रारूप बाधाओं को लागू करता है।

प्रोग्रामेटिक रूप से JSON डेटा मान्य करना

Schema सत्यापन सबसे उपयोगी तब होता है जब एप्लिकेशन कोड में एकीकृत किया जाता है। यहाँ विभिन्न भाषाओं में लोकप्रिय लाइब्रेरी का उपयोग करने के उदाहरण हैं।

Ajv के साथ JavaScript

Ajv JavaScript में सबसे व्यापक रूप से उपयोग किया जाने वाला JSON Schema सत्यापनकर्ता है। यह सभी ड्राफ्ट संस्करणों का समर्थन करता है और Schema के JIT संकलन के माध्यम से उत्कृष्ट प्रदर्शन प्रदान करता है।

import Ajv from 'ajv';
import addFormats from 'ajv-formats';

const ajv = new Ajv();
addFormats(ajv);

const schema = {
    type: 'object',
    properties: {
        name: { type: 'string', minLength: 1 },
        email: { type: 'string', format: 'email' },
        age: { type: 'integer', minimum: 0 }
    },
    required: ['name', 'email'],
    additionalProperties: false
};

const validate = ajv.compile(schema);
const valid = validate({ name: 'Alice', email: 'alice@example.com', age: 30 });

if (!valid) {
    console.log(validate.errors);
    // [{ keyword: 'required', params: { missingProperty: 'email' }, ... }]
}

jsonschema के साथ Python

from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "email": {"type": "string", "format": "email"},
        "age": {"type": "integer", "minimum": 0}
    },
    "required": ["name", "email"],
    "additionalProperties": False
}

try:
    validate(instance={"name": "Alice", "email": "alice@example.com"}, schema=schema)
except ValidationError as e:
    print(f"Validation failed: {e.message}")

JSON Schema के साथ API डेटा सत्यापन

JSON Schema का सबसे मूल्यवान अनुप्रयोग API अनुरोध और प्रतिक्रिया डेटा को मान्य करना है। यह सुनिश्चित करता है कि आपका API सुव्यवस्थित इनपुट प्राप्त करता है और अपेक्षित प्रारूप में डेटा लौटाता है, त्रुटियों को जल्दी पकड़ता है और क्लाइंट्स को स्पष्ट त्रुटि संदेश प्रदान करता है।

Express.js मिडलवेयर

import Ajv from 'ajv';

const ajv = new Ajv({ allErrors: true });

function validateBody(schema) {
    const validate = ajv.compile(schema);
    return (req, res, next) => {
        if (!validate(req.body)) {
            return res.status(400).json({
                error: 'Validation failed',
                details: validate.errors
            });
        }
        next();
    };
}

app.post('/api/users',
    validateBody({
        type: 'object',
        properties: {
            name: { type: 'string', minLength: 1, maxLength: 100 },
            email: { type: 'string', format: 'email' },
            role: { enum: ['admin', 'editor', 'viewer'] }
        },
        required: ['name', 'email'],
        additionalProperties: false
    }),
    (req, res) => {
        // req.body is guaranteed valid here
        createUser(req.body);
    }
);

OpenAPI और JSON Schema

OpenAPI (पूर्व में Swagger) API अनुरोध और प्रतिक्रिया Schema को परिभाषित करने के लिए JSON Schema के एक उपसमुच्चय का उपयोग करता है। यदि आप पहले से OpenAPI का उपयोग कर रहे हैं, तो आप अपने API विनिर्देश से Schema निकाल सकते हैं और उन्हें रनटाइम सत्यापन के लिए उपयोग कर सकते हैं। openapi-schema-validator और express-openapi-validator जैसे उपकरण इस प्रक्रिया को स्वचालित कर सकते हैं, यह सुनिश्चित करते हुए कि आपके API दस्तावेज़ और सत्यापन लॉजिक हमेशा सिंक में रहें।

सर्वोत्तम अभ्यास

Schema के विरुद्ध JSON डेटा मान्य करने की आवश्यकता है? हमारा मुफ्त ऑनलाइन JSON Schema सत्यापनकर्ता आज़माएँ। अपना Schema और डेटा पेस्ट करें और विस्तृत त्रुटि संदेशों के साथ तत्काल सत्यापन परिणाम प्राप्त करें।

JSON Schema वैलिडेटरJSON फ़ॉर्मेटर

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

JSON Schema क्या है?

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

मुझे JSON Schema का कौन सा संस्करण उपयोग करना चाहिए?

नए प्रोजेक्ट के लिए JSON Schema Draft 2020-12 का उपयोग करें। यह नवीनतम स्थिर संस्करण है और Ajv जैसे प्रमुख सत्यापन पुस्तकालयों द्वारा समर्थित है। यदि पुराने उपकरणों के साथ संगतता की आवश्यकता है, तो Draft 7 भी व्यापक रूप से समर्थित है। Draft 4 और पुराने से बचें क्योंकि वे पुराने कीवर्ड का उपयोग करते हैं और आधुनिक सुविधाओं की कमी है।

JSON Schema और TypeScript इंटरफ़ेस में क्या अंतर है?

TypeScript इंटरफ़ेस केवल TypeScript कोड में संकलन-समय प्रकार जाँच प्रदान करते हैं। JSON Schema प्रोग्रामिंग भाषाओं में रनटाइम सत्यापन प्रदान करता है, किसी भी स्रोत (API अनुरोध, फ़ाइलें, डेटाबेस) से डेटा मान्य कर सकता है। विकास-समय सुरक्षा के लिए TypeScript का उपयोग करें, और सिस्टम सीमाओं पर रनटाइम डेटा सत्यापन के लिए JSON Schema का उपयोग करें।

क्या JSON Schema API अनुरोध बॉडी को मान्य कर सकता है?

हाँ, JSON Schema का व्यापक रूप से API अनुरोध और प्रतिक्रिया सत्यापन के लिए उपयोग किया जाता है। Express (express-json-validator के साथ), FastAPI और Spring Boot जैसे फ्रेमवर्क मूल रूप से या मिडलवेयर के माध्यम से JSON Schema सत्यापन का समर्थन करते हैं। Schema के विरुद्ध अनुरोध बॉडी को मान्य करना सुनिश्चित करता है कि आने वाला डेटा एप्लिकेशन प्रसंस्करण से पहले सही संरचना में है।

सबसे महत्वपूर्ण JSON Schema कीवर्ड कौन से हैं?

सबसे महत्वपूर्ण कीवर्ड हैं: type (डेटा प्रकार), properties (ऑब्जेक्ट फ़ील्ड), required (आवश्यक फ़ील्ड), items (ऐरे एलिमेंट Schema), minimum/maximum (संख्यात्मक सीमाएँ), minLength/maxLength (स्ट्रिंग सीमाएँ), pattern (स्ट्रिंग रेगेक्स), enum (अनुमत मान) और $ref (Schema पुन: उपयोग के लिए संदर्भ)। ये कीवर्ड अधिकांश सत्यापन आवश्यकताओं को कवर करते हैं।