2010-02-03 10 views
6

अगर मैं json_encode() इस तरह एक सरणी पर का उपयोग करें:json_encode कुंजी से उद्धरण हटा दें?

return json_encode(array('foo' => 'bar')); 

वापसी है:

{'foo' : 'bar'} 

कुंजी एक शाब्दिक रूप में पारित हो जाता है, और कहा कि मेरी स्क्रिप्ट अप ट्रिपिंग है। क्या मैं सच में की जरूरत है:

{ foo : 'bar' } 

कर json_encode कि क्या या मैं कुछ बदसूरत regex के साथ अपने आप को बाहर उद्धरण पट्टी करनी पड़ती है?

+5

आपका दूसरा उदाहरण मान्य JSON नहीं है। चाबियों को तारों को उद्धृत किया जाना चाहिए। – Gumbo

उत्तर

14

जब मैं कोड के इस भाग का परीक्षण:

echo json_encode(array('foo' => 'bar')); 
die; 

मैं:

{"foo":"bar"} 

कौन सा मान्य JSON है।

(ध्यान दें इन डबल कोट्स, और नहीं सरल-उद्धरण के रूप में आप पोस्ट कर रहे हैं)


ouput आप के लिए पूछ रहे हैं:

{ foo : 'bar' } 

मान्य Javascript है, लेकिन है मान्य JSON नहीं - इसलिए json_encode उसे वापस नहीं करेगा।

JSON प्रारूप के विनिर्देश के लिए json.org देखें - जो जावास्क्रिप्ट का है, और जावास्क्रिप्ट स्वयं नहीं है। मेरी राय में इस तरह से बेहतर है,:


के बजाय, आप तो यह मान्य JSON स्वीकार करता है, अपने कोड अनुकूलन चाहिए "कुछ बदसूरत regex साथ अपने आप को बाहर उद्धरण अलग करना" ।

0

यह आपकी स्क्रिप्ट को कैसे बढ़ा रहा है?

और JSON specification प्रति के अनुसार, 0 स्ट्रिंग होने के लिए महत्वपूर्ण नाम हैं। आपके द्वारा पोस्ट किया गया दूसरा स्निपेट मान्य JSON नहीं है।

2

नहीं, json_encode यह आपके लिए नहीं करेगा। json specification निर्दिष्ट रूप से आवश्यक है कि कुंजी को स्ट्रिंग उद्धृत किया जाए। यह सुनिश्चित करने के लिए किया जाता है कि जो जावास्क्रिप्ट आरक्षित शब्द हैं वे डेटा ऑब्जेक्ट को तोड़ नहीं देंगे।

0

धन्यवाद, हर कोई। मैं JSON spec के बारे में नहीं जानता था। यह मुद्दा वास्तव में मेरी लिपि के साथ था क्योंकि मैंने अपने $ .ajax() फ़ंक्शन को "जेसन"

पर डेटाटाइप सेट नहीं किया था जो मैंने आज सीखा - जेएसओएन और जावास्क्रिप्ट एक ही बात नहीं है!

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