2012-08-31 11 views
6

के बजाय स्ट्रिंग प्रकार देता है I JSON-encoded स्ट्रिंग को json_decode() पर पास कर रहा हूं और इसके आउटपुट को ऑब्जेक्ट प्रकार होने की उम्मीद है, लेकिन इसके बजाय स्ट्रिंग प्रकार प्राप्त हो रहा हूं। मैं एक वस्तु कैसे वापस कर सकता हूं?json_decode ऑब्जेक्ट

डॉक्स में, निम्न एक वस्तु देता है:

$json = json_encode('{"a":1,"b":2,"c":3,"d":4,"e":5}'); 
var_dump(json_decode($json)); 
:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 
var_dump(json_decode($json)); 

हालांकि, अगर मैं स्ट्रिंग पहले json_encode() और फिर json_decode() फोन, उत्पादन एक स्ट्रिंग और नहीं एक वस्तु है

यह सिर्फ एक सरलीकृत उदाहरण है। अभ्यास में मैं जो कर रहा हूं वह JSON-encoded स्ट्रिंग को AJAX के माध्यम से PHP में दबा रहा है। हालांकि यह इस एन्कोडेड JSON स्ट्रिंग को किसी ऑब्जेक्ट में परिवर्तित करने की समस्या को दर्शाता है जिसे मैं PHP में पढ़ सकता हूं, उदाहरण के लिए, "$json->a"।

मैं ऑब्जेक्ट प्रकार कैसे वापस कर सकता हूं?

उत्तर के लिए धन्यवाद! इस प्रश्न का वास्तविक संदर्भ एक एपीआई से JSON प्रतिक्रिया का उपयोग कर रहा था। लेकिन जब मैं इस प्रतिक्रिया में json_decode करता हूं और मानों तक पहुंचने का प्रयास करता हूं - $ json = json_decode (एपीआई से जेसन प्रतिक्रिया); गूंज $ json-> एक यह मुझे एक त्रुटि देता है: वर्ग stdClass की वस्तु स्ट्रिंग के लिए कनवर्ट नहीं किया जा सकता है

+2

तुम क्यों एक पहले से ही इनकोडिंग JSON सांकेतिक शब्दों में बदलना करना चाहते हैं? EX: '$ json = json_encode ('{" a ": 1," b ": 2," c ": 3," d ": 4," e ": 5}');'? – Cosmin

+6

आप एक स्ट्रिंग एन्कोड कर रहे हैं, ऑब्जेक्ट नहीं तो जाहिर है कि जब आप इसे डीकोड करते हैं तो आपको स्ट्रिंग मिल जाएगी। – Musa

+0

बिल्कुल सही मूसा। यदि आप एक स्ट्रिंग पास कर रहे हैं तो आप ऑब्जेक्ट की अपेक्षा कैसे कर सकते हैं? –

उत्तर

0
var_dump(json_decode($json, true)); 

http://hk.php.net/manual/en/function.json-decode.php

+0

var_dump फ़ंक्शन और डीबग के माध्यम से चेक किया गया। इस समारोह को याद दिलाने के लिए धन्यवाद :) –

4

समारोह json_encode एक देशी पीएचपी वस्तु या में सरणी एन्कोड करने के लिए प्रयोग किया जाता है जेएसओएन प्रारूप।

उदाहरण के लिए

, $json = json_encode($arr) जहां $arr

$arr = array(
    'a' => 1, 
    'b' => 2, 
    'c' => 3, 
    'd' => 4, 
    'e' => 5, 
); 

स्ट्रिंग $json = '{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}' वापसी होगी है। इस बिंदु पर, आप को json_encode के साथ फिर से एन्कोड करने की आवश्यकता है!

अपनी सरणी वापस प्राप्त करने के लिए, बस json_decode($json, true) करें।

आप json_decode करने के लिए कॉल से true छोड़ देते हैं, तो आप JSON स्ट्रिंग में निर्दिष्ट विभिन्न गुणों के साथ बजाय stdClass का एक उदाहरण प्राप्त करेंगे।

अधिक संदर्भ के लिए देखें:

http://www.php.net/manual/en/function.json-encode.php

http://www.php.net/manual/en/function.json-decode.php

+0

उत्तर के लिए धन्यवाद! इस प्रश्न का वास्तविक संदर्भ एक एपीआई से JSON प्रतिक्रिया का उपयोग कर रहा था। लेकिन जब मैं इस प्रतिक्रिया में json_decode करता हूं और मानों तक पहुंचने का प्रयास करता हूं - $ json = json_decode (एपीआई से जेसन प्रतिक्रिया); echo $ json-> यह मुझे एक त्रुटि देता है: वर्ग stdClass का ऑब्जेक्ट स्ट्रिंग –

+0

में परिवर्तित नहीं किया जा सका .. क्या आप हमें वास्तविक जेसन प्रतिक्रिया दिखा सकते हैं जिसके साथ आप काम कर रहे हैं? –

+0

डी समस्या मिली! यह डबल json_decoded हो रहा था तो var_dump ऑब्जेक्ट के बजाय स्ट्रिंग दे रहा था। –

0

इसके बजाय JSON सारणी पर लिखने की, एक PHP सरणी में यह पहली बार डाल प्रयास करें।

<?php 
$array = array(
'a' => 1, 
'b' => 2, 
'c' => 3, 
'd' => 4, 
'e' => 5 
); 
//Then json_encode() 
$json = json_encode($array); 
echo $json; 
die; 
?> 

आपके मामले में, आप AJAX का उपयोग कर रहे हैं। तो जब आप एक सफलता पाने के लिए, आप यह कर सकते हैं:

$.ajax({ 
    url: 'example.com', 
    data: { 

    }, 
    success: function(data) { 
     console.log(data); 
    } 
}); 

console.log अंदर डेटा के बाद() data.a तरह json वर जोड़ने के लिए, data.b कर सकते हैं कहां ...

इसके अलावा, स्ट्रिंग आप providedm साथ आप json_encode करने के बाद से यह json प्रारूप में alrady है की जरूरत नहीं है

संबंधित मुद्दे