json_decode सरणी के लिए


422

मैं एक सरणी में JSON स्ट्रिंग को डीकोड करने की कोशिश कर रहा हूं, लेकिन मुझे निम्नलिखित त्रुटि मिलती है।

घातक त्रुटि: प्रकार stdClass के ऑब्जेक्ट को C में सरणी के रूप में उपयोग नहीं किया जा सकता: \ wamp \ www \ temp \ ask - लाइन 6 पर।

यहाँ कोड है:

<?php
$json_string = 'http://www.domain.com/jsondata.json';

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);
?>

1
यदि आप $ob->Resultइसके बजाय पहुंच के साथ काम करते।
लैपिन

जवाबों:


839

दस्तावेज़ीकरण के अनुसार , आपको यह निर्दिष्ट करने की आवश्यकता है कि क्या आपको किसी ऑब्जेक्ट के बजाय एक सहयोगी सरणी चाहिए json_decode, यह कोड होगा:

json_decode($jsondata, true);

4
यह सवाल है, यह एक सरणी और एक वस्तु के रूप में वापस जाने के क्या फायदे हैं?
फॉक्सिननी

52
यह सवाल उठाता है। "भीख माँगने" का अर्थ है किसी ऐसी चीज़ को मान लेना जो सिद्ध ( रेफ ) साबित हो । या तो मामले में, लाभ यह हो सकता है कि ओपी वस्तुओं की तुलना में अधिक आरामदायक ट्रैवर्सिंग एरे है, या कि कुछ अन्य, पहले से ही लागू, कोड के लिए एक सरणी की आवश्यकता है।
jamesnotjim

8
@jamesnotjim एक वस्तु को लौटाने वाला डिफ़ॉल्ट कार्यान्वयन इस सवाल को भीख दे सकता है कि वस्तुएं सरणियों से बेहतर रिटर्न मान हैं, क्या ऐसा नहीं हो सकता है?
डेविड मैन

7
वास्तव में यह @DavidMann हो सकता है। ट्च!
१:53:५३ पर jamesnotjim

8
मैं इस टिप्पणी (यद्यपि वर्षों बाद) को जोड़ूंगा कि इसमें JSON की कोई संभावना नहीं है, लेकिन डेटा इसे एक "डिफ़ॉल्ट" विकल्प बनाता है।
बैरी

45

इसे इस्तेमाल करे

$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);

27

यह एक देर से योगदान है, लेकिन इसके json_decodeसाथ कास्टिंग के लिए एक वैध मामला है (array)
निम्नलिखित को धयान मे रखते हुए:

$jsondata = '';
$arr = json_decode($jsondata, true);
foreach ($arr as $k=>$v){
    echo $v; // etc.
}

यदि $jsondataकभी भी एक रिक्त स्ट्रिंग के रूप में लौटाया जाता है (जैसा कि मेरे अनुभव में यह अक्सर होता है), json_decodeवापस आ जाएगा NULL, जिसके परिणामस्वरूप त्रुटि : चेतावनी: लाइन 3 पर फॉर्चे () के लिए आपूर्ति की गई अमान्य तर्क । आप यदि / फिर कोड या एक टर्नरी ऑपरेटर की एक पंक्ति जोड़ सकते हैं, लेकिन IMO यह केवल लाइन 2 को बदलने के लिए क्लीनर है ...

$arr = (array) json_decode($jsondata,true);

... जब तक आप json_decodeएक बार में लाखों बड़े सरणियों में प्रवेश नहीं करते हैं , जिस स्थिति में @ TCB13 बताते हैं, प्रदर्शन नकारात्मक रूप से प्रभावित हो सकता है।



6

PHP डॉक्यूमेंटेशन json_decode फंक्शन के अनुसार, एक पैरामीटर होता है जिसका नाम है assoc जो लौटी हुई वस्तुओं को सहयोगी सरणियों में परिवर्तित करता है

 mixed json_decode ( string $json [, bool $assoc = FALSE ] )

चूँकि असॉल्ट पैरामीटर FALSEडिफ़ॉल्ट रूप से होता है, आपको TRUEकिसी सरणी को पुनः प्राप्त करने के लिए यह मान सेट करना होगा ।

एक उदाहरण निहितार्थ के लिए नीचे दिए गए कोड की जांच करें:

$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)
}

5

यह भी इसे एक सरणी में बदल देगा:

<?php
    print_r((array) json_decode($object));
?>

6
यह सीपीयू / मेमोरी की बर्बादी है, जैसा कि सुझाव दिया json_decode($object, true);गया trueहै, बिल्कुल वैसा ही है, आंतरिक रूप से बहुत तेज है।
TCB13

1
@ TCB13 को छोड़कर अगर आपको दोनों की आवश्यकता है और फिर से डिकोड नहीं करना चाहते हैं
जिमी केन

3
कॉनकॉर @ जयमीकेन। मैंने दोनों संस्करणों को एक चक्र में चलाने की कोशिश की; यदि आपको ऑब्जेक्ट और एरे दोनों की आवश्यकता है (यद्यपि यह शायद ही कभी होना चाहिए?), तो json_decode+ फ्लेवर दोनों को चलाने की तुलना में 45% तेज है json_decode। दूसरी ओर, दोनों इतने तेज हैं कि जब तक आपको सचमुच हजारों डिकोडिंग की आवश्यकता नहीं होती , तब तक अंतर नगण्य है।
LSerni

4

json_decodeदूसरे तर्क का समर्थन करते हैं, जब यह करने के लिए सेट इसके बजाय TRUEवापस आ जाएगी । सभी समर्थित तर्कों और इसके विवरणों को देखने के लिए फ़ंक्शन के मैनुअल पेज की जाँच करें ।ArraystdClass Objectjson_decode

उदाहरण के लिए इसे आज़माएँ:

$json_string = 'http://www.example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, TRUE); // Set second argument as TRUE
print_r($obj['Result']); // Now this will works!

3
json_decode($data, true); // Returns data in array format 

json_decode($data); // Returns collections 

इसलिए, यदि आप एक सरणी चाहते हैं, तो आप json_decodeफ़ंक्शन में 'सही' के रूप में दूसरा तर्क पास कर सकते हैं ।


3

उम्मीद है इससे आपको मदद मिलेगी

$json_ps = '{"courseList":[  
            {"course":"1", "course_data1":"Computer Systems(Networks)"},  
            {"course":"2", "course_data2":"Audio and Music Technology"},  
            {"course":"3", "course_data3":"MBA Digital Marketing"}  
        ]}';

Json डिकोड फ़ंक्शन का उपयोग करें

$json_pss = json_decode($json_ps, true);

PHP में JSON सरणी पर लूपिंग

foreach($json_pss['courseList'] as $pss_json)
{

    echo '<br>' .$course_data1 = $pss_json['course_data1']; exit; 

}

परिणाम : कंप्यूटर सिस्टम (नेटवर्क)


2

PHP json_decode में json डेटा को PHP से संबंधित सरणी में
पूर्व में परिवर्तित करें :$php-array= json_decode($json-data, true); print_r($php-array);



2

इस तरह की कोशिश करें:

$json_string = 'https://example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj->Result);
foreach($obj->Result as $value){
  echo $value->id; //change accordingly
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.