2009-07-27 21 views
36

क्या किसी को PHP के लिए एक मजबूत (और बुलेट प्रूफ) is_JSON फ़ंक्शन स्निपेट पता है? मैं (जाहिर है) एक ऐसी स्थिति है जहां मुझे यह जानने की ज़रूरत है कि स्ट्रिंग JSON है या नहीं।यह निर्धारित करने के लिए कि कोई स्ट्रिंग मान्य JSON है या नहीं?

हम्म, शायद इसे JSONLint अनुरोध/प्रतिक्रिया के माध्यम से चलाएं, लेकिन यह थोड़ा अधिक लगता है।

+1

शूट; मेरे पास बुलेट प्रूफ समाधान आसान था, लेकिन यह बहुत मजबूत नहीं था, इसलिए मुझे इसे स्क्रैप करना पड़ा: पी –

उत्तर

60

आप उपयोग कर रहे हैं json_decode पीएचपी समारोह, json_last_error पिछले त्रुटि देता है में बनाया गया है (जैसे JSON_ERROR_SYNTAX जब अपने स्ट्रिंग नहीं JSON) था।

आमतौर पर json_decodenull रिटर्न देता है।

+3

हाँ, मैं मूर्ख हूं। यह स्पष्ट था और मैंने इसे अभी याद किया। मैं इसे जरूरी चीज़ में लपेट सकता हूं। धन्यवाद। – Spot

+0

ज्यादातर मामलों में ठोस समाधान, लेकिन सावधान रहें। json_decode भी पार्स कर सकते हैं उदा। संख्यात्मक तार एक स्ट्रिंग में एक फोन नंबर एक पूर्णांक में परिवर्तित किया जाएगा। हालांकि, यह हर सर्वर पर नहीं होता है। मेरी विंडोज़ मशीन पर मैं पूर्णांक प्राप्त कर रहा हूं, लिनक्स विकास प्रणाली पर मुझे झूठा मिल रहा है। मुझे लगता है कि यह आपके PHP इंस्टॉलेशन और कॉन्फ़िगरेशन पर निर्भर करता है – StoryTeller

+0

स्टोरीटेलर का उल्लेख है - json_decode ("51232") 51232 का मूल्यांकन करता है, इसलिए सभी परिस्थितियों में उपयोगी नहीं हो सकता है –

17

json_decode का उपयोग करने के बारे में क्या है, जो null वापस कर देना चाहिए यदि दिया गया स्ट्रिंग JSON-encoded डेटा मान्य नहीं है?

मैनुअल पृष्ठ पर उदाहरण के लिए 3 देखें:

// the following strings are valid JavaScript but not valid JSON 

// the name and value must be enclosed in double quotes 
// single quotes are not valid 
$bad_json = "{ 'bar': 'baz' }"; 
json_decode($bad_json); // null 

// the name must be enclosed in double quotes 
$bad_json = '{ bar: "baz" }'; 
json_decode($bad_json); // null 

// trailing commas are not allowed 
$bad_json = '{ bar: "baz", }'; 
json_decode($bad_json); // null 
4

json_decode()json_last_error() आपके लिए काम नहीं करता है? क्या आप कहने के लिए सिर्फ एक तरीका ढूंढ रहे हैं "क्या यह JSON जैसा दिखता है" या वास्तव में इसे मान्य करता है? json_decode() PHP के भीतर प्रभावी रूप से इसे सत्यापित करने का एकमात्र तरीका होगा।

3
 
$this->post_data = json_decode(stripslashes($post_data)); 
    if($this->post_data === NULL) 
    { 
    die('{"status":false,"msg":"The post_data parameter must be valid JSON"}'); 
    } 
13

अपनी परियोजनाओं मैं इस सुविधा का उपयोग करने के लिए (कृपया json_decode() डॉक्स पर पढ़ें "नोट")।

एक ही तर्क उत्तीर्ण करने पर आपको json_decode के पास चला जाएगा() यदि आप विशिष्ट एप्लिकेशन "त्रुटि" पता लगा सकते हैं (उदाहरण के लिए गहराई त्रुटियों)

पीएचपी> = 5,6

// PHP >= 5.6 
function is_JSON(...$args) { 
    json_decode(...$args); 
    return (json_last_error()===JSON_ERROR_NONE); 
} 

पीएचपी साथ> = 5.3

साथ

// PHP >= 5.3 
function is_JSON() { 
    call_user_func_array('json_decode',func_get_args()); 
    return (json_last_error()===JSON_ERROR_NONE); 
} 

प्रयोग उदाहरण:

$mystring = '{"param":"value"}'; 
if (is_JSON($mystring)) { 
    echo "Valid JSON string"; 
} else { 
    $error = json_last_error_msg(); 
    echo "Not valid JSON string ($error)"; 
} 
+0

मैं PHP में एक विशेषज्ञ नहीं हूं, लेकिन यह समाधान प्रतीत नहीं होता है बहुत ही कुशल, जब JSON डिकोडिंग की आवश्यकता होती है, तो यह दो बार करता है: एक बार परीक्षण करते समय स्ट्रिंग वैध JSON है, और दूसरी बार जब इसे वास्तव में डीकोड किया जाता है। ऐसा लगता है कि यह कार्य करना केवल बुद्धिमान होगा कि यह फ़ंक्शन केवल अंतिम JSON त्रुटि जांचें, यह मानते हुए कि json_decode पहले से ही निष्पादित कर दिया गया है। मैं अन्य राय का स्वागत करता हूं। –

+0

हाय @LiranH, मूल पोस्टर ने 'is_JSON' फ़ंक्शन का अनुरोध किया है इसलिए मैं उस फ़ंक्शन के भीतर नहीं मान सकता कि json_decode को अनुरोधित स्ट्रिंग पर निष्पादित किया गया था। उस स्थिति में आपके फ़ंक्शन को 'is_last_json_decoded_string_a_JSON_string' नाम दिया जाएगा। – cgaldiolo

+0

यह काफी उचित @cgaldiolo –

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

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