TypeScript में JSON प्रोसेसिंग: टाइपिंग, पार्सिंग और डेटा वैलिडेशन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript में JSON प्रोसेसिंग: बेसिक पार्सिंग से सख्त टाइपिंग तक

\n\n

TypeScript, JavaScript के ऊपर एक परत होने के नाते, JSON के साथ काम करने के सभी अंतर्निहित तरीकों को विरासत में लेता है, लेकिन उनमें एक शक्तिशाली टाइप सिस्टम जोड़ता है। हालाँकि, मानक JSON.parse() any प्रकार लौटाता है, जो स्टैटिक टाइपिंग के सभी लाभों को नकार देता है। इस लेख में, हम जानेंगे कि TypeScript में JSON को सुरक्षित और कुशलतापूर्वक कैसे संसाधित किया जाए, देशी क्षमताओं और विशेष लाइब्रेरीज़ दोनों का उपयोग करके।

\n\n

मानक JSON.parse की समस्या

\n\n

एक सामान्य परिदृश्य पर विचार करें:

\n\n
const jsonString = '{"name":"Alice","age":30}';\nconst user: any = JSON.parse(jsonString); // टाइप any\nconsole.log(user.name.toUpperCase()); // रनटाइम में त्रुटि, यदि name मौजूद नहीं है
\n\n

यदि JSON की संरचना अपेक्षित के अनुरूप नहीं है, तो TypeScript आपको चेतावनी नहीं देगा। समाधान - टाइप एशर्शन (type assertion) का उपयोग करना या, इससे भी बेहतर, रनटाइम के दौरान वैलिडेशन करना है।

\n\n

बेसिक टाइप एशर्शन (Type Assertion)

\n\n

सबसे आसान तरीका है परिणाम के प्रकार को स्पष्ट रूप से निर्दिष्ट करना:

\n\n
interface User {\n  id: number;\n  name: string;\n  email?: string;\n}\n\nconst raw = '{"id":1,"name":"Bob"}';\nconst user = JSON.parse(raw) as User;\nconsole.log(user.name); // TypeScript जानता है कि यह string है
\n\n

नुकसान: यदि JSON अन्य फ़ील्ड के साथ आता है, तो त्रुटि केवल रनटाइम में होगी। बाहरी API के साथ काम करते समय यह असुरक्षित है।

\n\n

JSON के लिए रिकर्सिव और कंडीशनल टाइप्स

\n\n

TypeScript आपको रिकर्सिव टाइप के माध्यम से किसी भी JSON का वर्णन करने की अनुमति देता है:

\n\n
type JSONValue = \n  | string\n  | number\n  | boolean\n  | null\n  | JSONValue[]\n  | { [key: string]: JSONValue };\n\nfunction safeParse(json: string): JSONValue | Error {\n  try {\n    return JSON.parse(json) as JSONValue;\n  } catch (e) {\n    return new Error('Invalid JSON');\n  }\n}
\n\n

यह दृष्टिकोण सुनिश्चित करता है कि परिणाम हमेशा एक मान्य JSON संरचना होगी, लेकिन विशिष्ट रूप की जाँच नहीं करता है।

\n\n

Zod लाइब्रेरी — रनटाइम पर स्कीमा वैलिडेशन

\n\n

Zod TypeScript में डेटा के डिक्लेरेटिव वैलिडेशन के लिए सबसे लोकप्रिय लाइब्रेरी है। यह आपको एक स्कीमा का वर्णन करने और उससे स्वचालित रूप से एक प्रकार प्राप्त करने की अनुमति देता है।

\n\n

इंस्टॉलेशन

\n
npm install zod
\n\n

उपयोग का उदाहरण

\n\n
import { z } from 'zod';\n\n// स्कीमा का वर्णन करें\nconst UserSchema = z.object({\n  id: z.number().positive(),\n  name: z.string().min(1),\n  email: z.string().email().optional(),\n  role: z.enum(['admin', 'user']).default('user'),\n});\n\n// स्कीमा से प्रकार निकालें\ntype User = z.infer<typeof UserSchema>;\n\n// सुरक्षित पार्सिंग\nconst result = UserSchema.safeParse(JSON.parse(rawJson));\n\nif (result.success) {\n  // result.data का प्रकार User है\n  console.log(result.data.name);\n} else {\n  console.error(result.error.format());\n}
\n\n

Zod स्वचालित रूप से प्रकार, फ़ील्ड की अनिवार्यता, डिफ़ॉल्ट मानों की जाँच करता है और विस्तृत त्रुटियाँ लौटाता है। REST API या कॉन्फ़िगरेशन फ़ाइलों से डेटा संसाधित करने के लिए यह एक आदर्श विकल्प है।

\n\n

io-ts लाइब्रेरी — कार्यात्मक दृष्टिकोण

\n\n

io-ts कार्यात्मक प्रोग्रामिंग और fp-ts लाइब्रेरी पर आधारित है। यह डेटा को डिकोड/एनकोड करने के लिए कोडेक्स (codecs) के संयोजन का उपयोग करता है।

\n\n

उदाहरण

\n\n
import * as t from 'io-ts';\nimport { isRight } from 'fp-ts/lib/Either';\n\nconst UserCodec = t.type({\n  id: t.number,\n  name: t.string,\n  tags: t.array(t.string),\n});\n\nconst decoded = UserCodec.decode(JSON.parse(raw));\n\nif (isRight(decoded)) {\n  // decoded.right — टाइप किया गया ऑब्जेक्ट\n  console.log(decoded.right.name);\n} else {\n  // decoded.left — वैलिडेशन त्रुटियाँ\n  console.log(decoded.left);\n}
\n\n

io-ts अधिक सख्त और गणितीय रूप से सही है, लेकिन इसके लिए कार्यात्मक अवधारणाओं (Either, pipe) की समझ की आवश्यकता होती है।

\n\n

अनुशंसाएँ