मैं PHP के साथ JSON से डेटा कैसे निकालूं?

Mar 28 2015

यह एक सामान्य संदर्भ प्रश्न और उत्तर कभी न खत्म होने वाले "मैं अपने JSON में डेटा का उपयोग कैसे करूं?" प्रशन। यह PHP में JSON को डिकोड करने और परिणामों तक पहुंचने की व्यापक मूल बातें को संभालने के लिए है।

मेरे पास JSON है:

{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}

मैं इसे PHP में कैसे डिकोड करूं और परिणामी डेटा तक पहुंच पाऊं?

जवाब

460 user3942918 Mar 28 2015 at 02:38

पहचान

सबसे पहले आपके पास एक स्ट्रिंग है। 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

ऐसा इसलिए होता है क्योंकि या तो:

  1. JSON, सिर्फ इतना है कि जिसमें संपूर्ण रूप null
  2. JSON अमान्य है - JSONLintjson_last_error_msg जैसी किसी चीज़ के माध्यम से परिणाम की जाँच करें या इसे रखें
  3. इसमें 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 में सरणियों और डेटा को सॉर्ट करने के लिए सभी बुनियादी तरीके

19 MohdAbdulMujib Oct 26 2016 at 20:24

आप 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मूल्य वापस कर सकते हैं ।
2 Sayeedamin Nov 06 2019 at 19:31
// 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>";
}
1 KankatalaKrishna Aug 06 2019 at 13:08

हम 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
PaulBurilichev Jan 22 2020 at 21:48

Https://packagist.org/packages/flow/jsonpath का उपयोग करने पर विचार JSONPath करें

इसका उपयोग करने का एक बहुत स्पष्ट विवरण है और प्रस्तावित सभी छोरों से बचने के लिए JSON-फ़ाइल को पार्स करना है । आप से परिचित हैं XPathके लिए XMLआप इस दृष्टिकोण प्यार शुरू कर देंगे।