JSON Schema जनरेटर

JSON Schema को स्वचालित रूप से उत्पन्न करने के लिए JSON पेस्ट करें।

कोई डेटा आपके डिवाइस से नहीं जाता

कैसे उपयोग करें

  1. इनपुट क्षेत्र में JSON ऑब्जेक्ट या ऐरे पेस्ट करें
  2. विकल्प सक्षम करें: अपने मानों से "required" ऐरे या "examples" शामिल करें।
  3. JSON Schema (Draft 2020-12) बनाने के लिए स्कीमा जनरेट करें पर क्लिक करें।
  4. जनरेट किया गया स्कीमा कॉपी या डाउनलोड करें।

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

JSON Schema का कौन सा संस्करण जनरेट होता है?

जनरेटर JSON Schema Draft 2020-12 (https://json-schema.org/draft/2020-12/schema) उत्पन्न करता है, नवीनतम स्थिर ड्राफ़्ट।

क्या यह नेस्टेड ऑब्जेक्ट और ऐरे को संभालता है?

हाँ। जनरेटर पुनरावर्ती रूप से नेस्टेड ऑब्जेक्ट और ऐरे को संभालता है। ऐरे के लिए, यह पहले तत्व से स्कीमा अनुमानित करता है।

क्या मैं जनरेट किए गए स्कीमा को संपादित कर सकता हूँ?

आउटपुट एक प्रारंभिक बिंदु है। आप minLength, minimum, pattern जैसी बाधाएँ जोड़ना चाहेंगे।

JSON Schema किस लिए है

JSON Schema एक JSON दस्तावेज़ कैसा दिखना चाहिए, इसका वर्णन करने का एक घोषणात्मक तरीक़ा है: इसकी कौन-सी प्रॉपर्टीज़ हैं, वे प्रॉपर्टीज़ कौन-से प्रकार रखती हैं, क्या आवश्यक है बनाम वैकल्पिक, और कौन-से मान वैध हैं। यह JSON-जगत का XML के लिए XSD या डेटाबेस तालिका परिभाषा का समकक्ष है। आधिकारिक प्रोजेक्ट json-schema.org पर है।

जहाँ आप इसे जंगल में मिलेंगे:

वे drafts जो आप जंगल में देखेंगे

JSON Schema की विशिष्टता drafts की एक श्रृंखला के रूप में प्रकाशित हुई है। वर्तमान स्थिर draft 2020-12 है (आधिकारिक spec पृष्ठ के अनुसार: «The current version is 2020-12»)। वे drafts जो आप मिल सकते हैं:

संदेह में, वह draft चुनें जो आपके सत्यापक से मेल खाए। AJV (सबसे लोकप्रिय JavaScript सत्यापक) स्पष्ट opt-in के साथ Drafts 04, 06, 07, 2019-09, और 2020-12 का समर्थन करता है। Python में jsonschema भी ऐसा ही करता है। यदि आप नहीं जानते कि आपका डाउनस्ट्रीम उपभोक्ता क्या चाहता है, तो 2020-12 नए कार्य के लिए एक सुरक्षित डिफ़ॉल्ट है।

बिल्ट-इन प्रकार

JSON Schema JSON के मान-प्रकारों के अनुरूप सात आधार प्रकार वर्णित करता है:

प्रकारJSON मानसामान्य कीवर्ड
string"hello"minLength, maxLength, pattern, format
number42, 3.14minimum, maximum, exclusiveMinimum, multipleOf
integer42number का उपसमुच्चय; कोई भिन्नात्मक भाग नहीं।
booleantrue / falseकोई अतिरिक्त बाधा नहीं।
nullnullअलग प्रकार; जब nulls वैध हों तो स्पष्ट।
array[…]items, minItems, maxItems, uniqueItems
object{…}properties, required, additionalProperties

रचना कीवर्ड आपको मिक्स-एंड-मैच की अनुमति देते हैं: oneOf (ठीक एक), anyOf (कम से कम एक), allOf (हर एक), not (विपरीत)। साथ ही enum अनुमत मानों की एक सीमित सूची के लिए और const एकल निश्चित मान के लिए।

एक स्वतः-उत्पन्न schema आपको क्या बता सकता है और क्या नहीं

एकल JSON उदाहरण से schema का अनुमान शक्तिशाली पर सीमित है। जनरेटर पता लगा सकता है:

यह नहीं पता लगा सकता:

आउटपुट को 70%-पूर्ण शुरुआती बिंदु के रूप में मानें। मूल्यवान जोड़ (कौन-से फ़ील्ड वास्तव में आवश्यक हैं, कौन-से स्ट्रिंग प्रारूप लागू होते हैं, कौन-सी मान सीमाएँ अनुमत हैं, हर फ़ील्ड का क्या मतलब है) मानवीय-curation का चरण है।

जानने योग्य दो सूक्ष्म जाल

JSON Schema vs Zod / Joi / Yup vs TypeScript टाइप्स

कई तकनीकें JSON Schema की भूमिका से ओवरलैप करती हैं; प्रत्येक का अलग स्वीट स्पॉट है:

यदि आपके schema को कई भाषाओं द्वारा या टूलों (IDE, OpenAPI टूलिंग, कोड जेनरेटर) द्वारा उपभोग करना है, तो JSON Schema सही घर है। यदि आप एक भाषा के अंदर रहते हैं, तो भाषा-नेटिव विकल्प आम तौर पर लिखने में अच्छा होता है।

सामान्य उपयोग मामले

सामान्य ग़लतियाँ

  1. स्वतः-उत्पन्न schema को अंतिम spec मानना। यह एक शुरुआती बिंदु है। प्रारूप संकेत जोड़ें, सच में-वैकल्पिक फ़ील्ड चिह्नित करें, दस्तावेज़ीकरण जोड़ें, मान सीमाएँ निर्धारित करें।
  2. $schema घोषणा गुम। सत्यापक इसका उपयोग जानने के लिए करते हैं कि कौन-सा draft लागू करें। इसे हमेशा schema के शीर्ष पर शामिल करें।
  3. required को प्रति-प्रॉपर्टी विशेषता के रूप में मानना। XSD या Mongoose schemas के विपरीत, JSON Schema का required मूल ऑब्जेक्ट स्तर पर एक array है जो आवश्यक प्रॉपर्टीज़ के नाम सूचीबद्ध करता है।
  4. जब आप सख़्त सत्यापन चाहते हैं तो additionalProperties: false भूलना। डिफ़ॉल्ट true है, यानी अज्ञात कुंजियाँ चुपचाप अनुमत होती हैं।
  5. enum को examples के साथ भ्रमित करना। enum = अनुमत मानों की सूची (सत्यापन)। examples = केवल दस्तावेज़ीकरण के लिए नमूना मान (कोई सत्यापन प्रभाव नहीं)।
  6. यह मानना कि format लागू किया जाता है। Draft 2020-12 में डिफ़ॉल्ट रूप से यह एक एनोटेशन है, अभिकथन नहीं; आपका email regex तब तक नहीं चलेगा जब तक आप opt in न करें।
  7. एकल उदाहरण से वैकल्पिकता का अनुमान लगाना। आपके उदाहरण की हर कुंजी डिफ़ॉल्ट रूप से required बन जाती है। वास्तविक specs में लगभग हमेशा वैकल्पिक फ़ील्ड होते हैं; उन्हें curation के हिस्से के रूप में required array से हटाएँ।

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

क्या schema OpenAPI 3.1 के साथ काम करेगा?

हाँ। OpenAPI 3.1 (फ़रवरी 2021 में जारी) ने अपनी schema भाषा को JSON Schema Draft 2020-12 के साथ पूरी तरह संरेखित किया, जो यह जनरेटर निकालता है। schema को अपने OpenAPI दस्तावेज़ में components.schemas में डालें और $ref के माध्यम से इसे संदर्भित करें। पुराना OpenAPI 3.0 पहले के उपसमुच्चय का उपयोग करता था; यदि आप 3.0 लक्षित कर रहे हैं तो आपको समायोजित करने की आवश्यकता हो सकती है।

क्या मैं इस schema से अपनी भाषा में types उत्पन्न कर सकता हूँ?

हाँ। quicktype एक JSON Schema से TypeScript, Go, Python, Java, C#, Swift, Kotlin, Rust, Elm, और अन्य उत्पन्न करता है। json-schema-to-typescript एक JS-विशिष्ट विकल्प है। अधिकांश आधुनिक भाषाओं में कम से कम एक schema-to-types टूल है; उत्पन्न schema उन सभी के लिए इनपुट के रूप में काम करता है।

$defs और definitions में क्या अंतर है?

दोनों पुनः उपयोग करने योग्य उप-schemas रखने के स्थान हैं जिन्हें आप दस्तावेज़ में अन्यत्र $ref कर सकते हैं। definitions लीगेसी नाम है, जो Drafts 04, 06, और 07 में उपयोग किया गया। $defs वर्तमान नाम है, Draft 2019-09 में पेश किया गया और 2020-12 में जारी रहा। कार्यात्मक रूप से समतुल्य, पर नए कार्य के लिए $defs का उपयोग करें।

क्या मेरा JSON कहीं भेजा जाता है?

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

मेरे array के schema ने केवल पहला तत्व क्यों वर्णित किया?

एकल उदाहरण से अनुमान arrays को सजातीय मानता है: यह पहला तत्व देखता है और मानता है कि बाकी मेल खाता है। यदि आपका वास्तविक array विभिन्न आकार रख सकता है, तो आपको items को हाथ से { "oneOf": [...] } के रूप में लिखना होगा। या प्रत्येक वैरिएंट पर अलग-अलग जनरेटर चलाएँ और schemas को संयोजित करें।

क्या मुझे जनरेटर का उपयोग करना चाहिए, या schema हाथ से लिखना चाहिए?

एक छोटे schema के लिए जिसे आप अंत-से-अंत तक नियंत्रित करते हैं, हाथ से लिखना आपको spec तेज़ी से सिखाता है। दर्जनों नेस्टेड ऑब्जेक्ट वाली बड़ी API प्रतिक्रिया के लिए, उत्पन्न करना आपको सेकंडों में एक मसौदा देता है और आप बचाया गया समय बाधाओं, विवरणों और required arrays को curate करने में बिताते हैं। अधिकांश सक्रिय डेवलपर दोनों करते हैं: उत्पन्न करें, फिर curate करें।

संबंधित टूल

निःशुल्क JSON फॉर्मेटर और वैलिडेटर JSON तुलना करें JSON से YAML