मैं PHP के साथ JSON से डेटा कैसे निकालूं?
यह एक सामान्य संदर्भ प्रश्न और उत्तर कभी न खत्म होने वाले "मैं अपने JSON में डेटा का उपयोग कैसे करूं?" प्रशन। यह PHP में JSON को डिकोड करने और परिणामों तक पहुंचने की व्यापक मूल बातें को संभालने के लिए है।
मेरे पास JSON है:
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}
मैं इसे PHP में कैसे डिकोड करूं और परिणामी डेटा तक पहुंच पाऊं?
जवाब
पहचान
सबसे पहले आपके पास एक स्ट्रिंग है। 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
सहयोगी सरणी आइटम तक पहुँचना
जब एक एसोसिएटेड PHP सरणी में JSON ऑब्जेक्ट को डिकोड किया जाता है, तो आप 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 में बड़ी JSON फ़ाइलों को संसाधित करना
- कैसे एक बड़ी json फ़ाइल के माध्यम से ठीक से पुनरावृति करने के लिए
इसे कैसे छांटना है
देखें: संदर्भ: PHP में सरणियों और डेटा को सॉर्ट करने के लिए सभी बुनियादी तरीके ।
आप json स्ट्रिंग को PHP ऑब्जेक्ट / एरे में बदलने के लिए json_decode () का उपयोग कर सकते हैं ।
उदाहरण के लिए।
इनपुट:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
आउटपुट:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
याद रखने के लिए कुछ बिंदु:
json_decode
स्ट्रिंग को एकjson
और वैध होने की आवश्यकता होती है, यह वापस आ जाएगीNULL
।- डिकोड करने में विफलता की स्थिति में,
json_last_error()
त्रुटि की सटीक प्रकृति को निर्धारित करने के लिए उपयोग किया जा सकता है। - सुनिश्चित करें कि आप
utf8
सामग्री में पास हो गए हैं, याjson_decode
त्रुटि हो सकती है और बस एकNULL
मूल्य वापस कर सकते हैं ।
// Using json as php array
$json = '[{"user_id":"1","user_name":"Sayeed Amin","time":"2019-11-06 13:21:26"}]';
//or use from file
//$json = file_get_contents('results.json');
$someArray = json_decode($json, true);
foreach ($someArray as $key => $value) {
echo $value["user_id"] . ", " . $value["user_name"] . ", " . $value["time"] . "<br>";
}
हम php में json_decode फ़ंक्शन का उपयोग करके json string को सरणी में डीकोड कर सकते हैं
1) json_decode ($ json_string) // यह ऑब्जेक्ट लौटाता है
2) json_decode ($ json_string, true) // यह सरणी देता है
$json_string = '{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$array = json_decode($json_string,true);
echo $array['type']; //it gives donut
Https://packagist.org/packages/flow/jsonpath का उपयोग करने पर विचार JSONPath
करें
इसका उपयोग करने का एक बहुत स्पष्ट विवरण है और प्रस्तावित सभी छोरों से बचने के लिए JSON-फ़ाइल को पार्स करना है । आप से परिचित हैं XPath
के लिए XML
आप इस दृष्टिकोण प्यार शुरू कर देंगे।