परिचय: PHP को JSON की आवश्यकता क्यों है?
JSON (JavaScript Object Notation) एक हल्का डेटा विनिमय प्रारूप है जो वेब-API, कॉन्फ़िगरेशन फ़ाइलों और संरचित जानकारी के भंडारण के लिए डी-फैक्टो मानक बन गया है। JavaScript से उत्पन्न होने के बावजूद, JSON सभी आधुनिक प्रोग्रामिंग भाषाओं, जिसमें PHP भी शामिल है, में उत्कृष्ट रूप से समर्थित है।
PHP में JSON के साथ काम दो मुख्य फ़ंक्शनों के माध्यम से मूल रूप से लागू किया गया है: json_encode() (सीरियलाइज़ेशन — PHP डेटा को JSON स्ट्रिंग में बदलना) और json_decode() (डीसीरियलाइज़ेशन — JSON स्ट्रिंग को वापस PHP संरचनाओं में पार्स करना)। इस लेख में, हम विस्तार से चर्चा करेंगे कि इन उपकरणों का प्रभावी ढंग से उपयोग कैसे करें, त्रुटियों को कैसे संभालें और वास्तविक परियोजनाओं में JSON को कैसे लागू करें।
1. डेटा का सीरियलाइज़ेशन: json_encode() फ़ंक्शन
json_encode() फ़ंक्शन PHP मान (एरे, ऑब्जेक्ट, स्ट्रिंग, संख्या) को JSON प्रारूप की स्ट्रिंग में बदलता है। यह तब आवश्यक है जब आप क्लाइंट को डेटा भेजना चाहते हैं (उदाहरण के लिए, AJAX के माध्यम से) या इसे फ़ाइल में सहेजना चाहते हैं।
मूल सिंटैक्स और उदाहरण
<?php// सरल एरे$colors = ["red", "green", "blue"];echo json_encode($colors);// आउटपुट: ["red","green","blue"]
// एसोसिएटिव एरे$user = [ "name" => "इवान", "age" => 30, "is_admin" => false];echo json_encode($user);// आउटपुट: {"name":"इवान","age":30,"is_admin":false}?>json_encode() के उपयोगी फ़्लैग
फ़ंक्शन दूसरे पैरामीटर का समर्थन करता है — फ़्लैग का बिट मास्क। आइए सबसे उपयोगी फ़्लैग देखें:
JSON_PRETTY_PRINT— पठनीयता के लिए इंडेंटेशन के साथ आउटपुट को फ़ॉर्मेट करता है।JSON_UNESCAPED_UNICODE— सिरिलिक और अन्य Unicode वर्णों को एस्केप नहीं करता (अन्यथा रूसी अक्षर \\uXXXX में बदल जाएंगे)।JSON_NUMERIC_CHECK— संख्याओं वाली स्ट्रिंग को संख्यात्मक प्रकार में बदलता है।JSON_FORCE_OBJECT— इंडेक्स किए गए एरे के लिए भी एरे को जबरन ऑब्जेक्ट में बदलता है।
<?php$data = ["name" => "अन्ना", "age" => "25"];
// फ़्लैग के बिनाecho json_encode($data);// {"name":"\\u0410\\u043d\\u043d\\u0430","age":"25"}
// फ़्लैग के साथecho json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);/*{ "name": "अन्ना", "age": "25"}*/?>2. JSON पार्सिंग: json_decode() फ़ंक्शन
json_decode() फ़ंक्शन विपरीत ऑपरेशन करता है — JSON स्ट्रिंग को वापस PHP वेरिएबल में बदलता है। डिफ़ॉल्ट रूप से, यह stdClass क्लास का ऑब्जेक्ट लौटाता है, लेकिन आप एसोसिएटिव एरे का अनुरोध कर सकते हैं।
ऑब्जेक्ट और एरे में पार्सिंग
<?php$jsonString = '{"name":"पीटर","age":28,"skills":["PHP","MySQL"]}';
// डिफ़ॉल्ट रूप से — ऑब्जेक्ट$obj = json_decode($jsonString);echo $obj->name; // पीटरecho $obj->skills[0]; // PHP
// true फ़्लैग के साथ — एसोसिएटिव एरे$arr = json_decode($jsonString, true);echo $arr["name"]; // पीटरecho $arr["skills"][1]; // MySQL?>रिकर्सन की गहराई
तीसरा पैरामीटर depth नेस्टिंग की गहराई को सीमित करता है। डिफ़ॉल्ट रूप से — 512 स्तर। यह "billion laughs attack" जैसे हमलों से सुरक्षा है:
<?php$malicious = '{"a":{"b":{"c":"d"}}}';$result = json_decode($malicious, false, 2); // अधिकतम 2 स्तर// null लौटाएगा, क्योंकि गहराई पार हो गई है?>3. JSON के साथ काम करते समय त्रुटि प्रबंधन
सबसे आम समस्याओं में से एक है गलत JSON स्ट्रिंग। PHP पार्सिंग त्रुटि पर अपवाद नहीं फेंकता, बल्कि null लौटाता है। यह समझने के लिए कि क्या गलत हुआ, json_last_error() और json_last_error_msg() फ़ंक्शन का उपयोग करें।
त्रुटियों की जाँच
<?php$badJson = '{"name": "त्रुटि, बिना उद्धरण के}';$data = json_decode($badJson);
if (json_last_error() !== JSON_ERROR_NONE) { echo "JSON त्रुटि: " . json_last_error_msg();\