पहचान
सबसे पहले आपके पास एक स्ट्रिंग है। JSON कोई सरणी, ऑब्जेक्ट या डेटा संरचना नहीं है। JSON एक टेक्स्ट-आधारित क्रमांकन प्रारूप है - इसलिए एक फैंसी स्ट्रिंग है, लेकिन अभी भी सिर्फ एक स्ट्रिंग है। इसका उपयोग करके PHP में Decode करें json_decode()
।
$data = json_decode($json);
उसमें आपको मिल सकता है:
ये वो चीजें हैं जो JSON में एनकोड की जा सकती हैं। या अधिक सटीक रूप से, ये उन चीज़ों के PHP संस्करण हैं जो JSON में एन्कोड किए जा सकते हैं।
उनके बारे में कुछ खास नहीं है। वे "JSON ऑब्जेक्ट्स" या "JSON सरणियाँ" नहीं हैं। आपने JSON को डिकोड किया है - अब आपके पास हर रोज़ PHP प्रकार के बेसिक हैं ।
ऑब्जेक्ट्स stdClass के उदाहरण होंगे , एक बिल्ट-इन क्लास जो सिर्फ एक सामान्य बात है जो यहाँ महत्वपूर्ण नहीं है।
वस्तु गुणों तक पहुँचना
आप इनमें से किसी एक वस्तु के गुणों का उपयोग उसी तरह करते हैं जैसे आप किसी अन्य वस्तु के सार्वजनिक गैर-स्थिर गुणों के लिए करते हैं, जैसे $object->property
।
$json = '
{
"type": "donut",
"name": "Cake"
}';
$yummy = json_decode($json);
echo $yummy->type; //donut
पहुंच तत्व
आप इनमें से किसी एक एरे के तत्वों को उसी तरह एक्सेस करते हैं, जैसे आप किसी अन्य ऐरे के लिए करते हैं $array[0]
।
$json = '
[
"Glazed",
"Chocolate with Sprinkles",
"Maple"
]';
$toppings = json_decode($json);
echo $toppings[1]; //Chocolate with Sprinkles
के साथ उस पर Iterate करें foreach
।
foreach ($toppings as $topping) {
echo $topping, "\n";
}
स्प्रिंकल्स
मेपल के साथ चमकता हुआ चॉकलेट
या किसी भी बिलियन बिल्ट-इन एरे फ़ंक्शन के साथ गड़बड़ करें ।
नेस्टेड आइटम तक पहुंचना
वस्तुओं के गुण और सरणियों के तत्व अधिक वस्तुएं और / या सरणियाँ हो सकते हैं - आप बस उनके गुणों और सदस्यों को हमेशा की तरह एक्सेस करना जारी रख सकते हैं, जैसे $object->array[0]->etc
।
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$yummy = json_decode($json);
echo $yummy->toppings[2]->id; //5004
Json_decode ()true
के दूसरे तर्क के रूप में पासिंग
जब आप ऐसा करते हैं, तो वस्तुओं के बजाय आपको साहचर्य सरणियाँ मिलेंगी - कुंजियों के लिए सरणियाँ। फिर आप हमेशा की तरह तत्वों तक पहुँचते हैं, जैसे $array['key']
।
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$yummy = json_decode($json, true);
echo $yummy['toppings'][2]['type']; //Maple
सहयोगी सरणी आइटम तक पहुँचना
जब एक JSON ऑब्जेक्ट को एक सहयोगी PHP सरणी में डिकोड किया जाता है, तो आप foreach (array_expression as $key => $value)
सिंटैक्स का उपयोग करके कुंजी और मान दोनों को पुनरावृत्त कर सकते हैं , जैसे
$json = '
{
"foo": "foo value",
"bar": "bar value",
"baz": "baz value"
}';
$assoc = json_decode($json, true);
foreach ($assoc as $key => $value) {
echo "The value of key '$key' is '$value'", PHP_EOL;
}
प्रिंटों
कुंजी 'फू' का मूल्य 'फू वैल्यू' है
, कुंजी 'बार' का मूल्य 'बार वैल्यू' है
, कुंजी 'बाज' का मूल्य 'बाज मूल्य' है
पता नहीं कैसे डेटा संरचित है
JSON से आपको जो भी मिल रहा है, उसके लिए प्रलेखन पढ़ें।
JSON को देखें - जहाँ आप देखते हैं घुंघराले कोष्ठक {}
एक वस्तु की अपेक्षा करते हैं, जहाँ आप देखते हैं कि वर्ग कोष्ठक []
एक सरणी की अपेक्षा करते हैं।
डीकोड किए गए डेटा को एक साथ मारो print_r()
:
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$yummy = json_decode($json);
print_r($yummy);
और आउटपुट की जाँच करें:
stdClass Object
(
[type] => donut
[name] => Cake
[toppings] => Array
(
[0] => stdClass Object
(
[id] => 5002
[type] => Glazed
)
[1] => stdClass Object
(
[id] => 5006
[type] => Chocolate with Sprinkles
)
[2] => stdClass Object
(
[id] => 5004
[type] => Maple
)
)
)
यह आपको बताएगा कि आपके पास कहाँ वस्तुएं हैं, जहां आपके पास सरणियाँ हैं, साथ ही उनके सदस्यों के नाम और मूल्य भी हैं।
यदि आप केवल खो जाने से पहले ही इसे प्राप्त कर सकते हैं - उस दूर तक जाएं और उसके साथ टकराएं print_r()
:
print_r($yummy->toppings[0]);
stdClass Object
(
[id] => 5002
[type] => Glazed
)
इस आसान इंटरैक्टिव JSON एक्सप्लोरर में इसे देखें ।
समस्या को ऐसे टुकड़ों में तोड़ें जो आपके सिर को चारों ओर लपेटने में आसान हों।
json_decode()
रिटर्न null
ऐसा इसलिए होता है क्योंकि या तो:
- JSON, सिर्फ इतना है कि जिसमें संपूर्ण रूप
null
।
- JSON अमान्य है - JSONLint
json_last_error_msg
जैसी किसी चीज़ के माध्यम से परिणाम की जाँच करें या इसे रखें ।
- इसमें 512 से अधिक गहरे स्तर के नेस्टेड तत्व होते हैं। इस डिफ़ॉल्ट अधिकतम गहराई को तीसरे तर्क के रूप में पूर्णांक पास करके ओवरराइड किया जा सकता है
json_decode()
।
यदि आपको अधिकतम गहराई को बदलने की आवश्यकता है तो आप शायद गलत समस्या को हल कर रहे हैं। पता करें कि आपको ऐसा गहरा नेस्टेड डेटा क्यों मिल रहा है (जैसे कि जिस सेवा को आप JSON जनरेट कर रहे हैं वह बग है) और कहा कि ऐसा न हो।
ऑब्जेक्ट प्रॉपर्टी नाम में एक विशेष वर्ण होता है
कभी-कभी आपके पास एक ऑब्जेक्ट प्रॉपर्टी का नाम होगा जिसमें हाइफ़न -
या साइन जैसे कुछ होते हैं जो कि @
शाब्दिक पहचानकर्ता में उपयोग नहीं किए जा सकते हैं। इसके बजाय आप इसे संबोधित करने के लिए घुंघराले ब्रेस के भीतर एक स्ट्रिंग शाब्दिक का उपयोग कर सकते हैं।
$json = '{"@attributes":{"answer":42}}';
$thing = json_decode($json);
echo $thing->{'@attributes'}->answer; //42
यदि आपके पास एक पूर्णांक है जैसा कि संपत्ति देखें: पूर्णांक जैसे नामों के साथ ऑब्जेक्ट गुणों तक कैसे पहुंचें? संधर्भ से।
किसी ने आपके JSON में JSON डाल दिया
यह हास्यास्पद है, लेकिन ऐसा होता है - JSON आपके JSON के भीतर एक स्ट्रिंग के रूप में एन्कोड किया गया है। डिकोड, पहुँच हमेशा की तरह स्ट्रिंग, डिकोड कि , और अंततः आपको क्या चाहिए करने के लिए मिलता है।
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": "[{ \"type\": \"Glazed\" }, { \"type\": \"Maple\" }]"
}';
$yummy = json_decode($json);
$toppings = json_decode($yummy->toppings);
echo $toppings[0]->type; //Glazed
डेटा मेमोरी में फिट नहीं होता है
यदि आपका JSON बहुत बड़ा है json_decode()
, तो एक बार चीजों को संभालना मुश्किल हो जाता है। देख:
इसे कैसे छाँटा जाए
देखें: संदर्भ: PHP में सरणियों और डेटा को सॉर्ट करने के लिए सभी बुनियादी तरीके ।