2014-10-07 6 views
36

रूबी में, यह जांचने का कोई तरीका है कि स्ट्रिंग वैध पार्सन को पार्स करने का प्रयास करने से पहले क्या है?यह जांचने से पहले कि कोई स्ट्रिंग मान्य जेसन है या नहीं?

उदाहरण के लिए कुछ अन्य यूआरएल से कुछ जानकारी प्राप्त करना, कभी-कभी यह जेसन लौटाता है, कभी-कभी यह एक कचरा वापस कर सकता है जो वैध प्रतिक्रिया नहीं है।

मेरे कोड:

def get_parsed_response(response) 
    parsed_response = JSON.parse(response) 
end 
+7

मुझे यकीन है कि यह सुनिश्चित करने का एकमात्र तरीका यह मान्य है कि यह मान्य है। इसका विश्लेषण क्यों न करें और पार्सिंग त्रुटि को संभालें, यह बताते हुए कि यह अमान्य है? उदाहरण के लिए –

+3

इस प्रकार 'JSON.parse (स्ट्रिंग) बचाव शून्य – gotva

+1

सैद्धांतिक रूप से, एक तरीका होना चाहिए। एक स्ट्रिंग को पार्स करने से यह पता लगाने की तुलना में एक उचित ढंग से मजबूत जानकारी में परिणाम मिलता है कि यह पार्सबल है या नहीं। चॉम्स्की के शब्द में, प्राकृतिक भाषा के संबंध में, यह भेद कमजोर जनरेटिव क्षमता बनाम मजबूत है। हालांकि, ऊपर की टिप्पणियों के साथ त्रुटि को बचाने के साथ क्या गलत है? – sawa

उत्तर

15

आप इसे इस तरह

begin 
    JSON.parse(string) 
rescue JSON::ParserError => e 
    # do smth 
end 

# or for method get_parsed_response 

def get_parsed_response(response) 
    parsed_response = JSON.parse(response) 
rescue JSON::ParserError => e 
    # do smth 
end 
+1

कृपया ध्यान दें कि के तहत 'TypeError' हो सकता है, ऐसा कुछ ऐसा होगा जो पूर्ण रूप से स्ट्रिंग (उदा। शून्य) – Leaf

39

आप की जाँच करने के लिए एक विधि बना सकते हैं पार्स कर सकते हैं:

def valid_json?(json) 
    JSON.parse(json) 
    return true 
    rescue JSON::ParserError => e 
    return false 
end 
+6

में परिवर्तित नहीं किया जा सकता है अपवाद खतरनाक है। इसका उपयोग केवल तभी किया जाना चाहिए जब बिल्कुल जरूरी हो। इसके बजाय कई अपवादों को बचाएं, जैसे: बचाव प्रकार त्रुटि, JSON :: पार्सर इरर, आदि – Houen

+0

अरे थानक्स Houen। कोड –

+1

को "प्रारंभ" करने की आवश्यकता नहीं है। डीफ - बचाव - अंत काम करना चाहिए –

3

मुझे लगता है कि parse_jsonnil लौटना चाहिए अगर यह अमान्य है और त्रुटि नहीं होनी चाहिए।

def parse_json string 
    JSON.parse(string) rescue nil 
end 

unless json = parse_json string 
    parse_a_different_way 
end 
+1

क्योंकि इसकी सुंदरता ... वास्तव में, मैं जेएसओएन खोलने और parse_without_error नामक एक विधि बनाने पर विचार कर रहा हूं। – stevo999999

+0

ध्यान दें कि 'शून्य' और 'झूठी' वैध JSON भी हैं। 'JSON.parse' रिटर्न' शून्य 'और' झूठी 'है जिसे ऊपर दिए गए कोड में पार्स त्रुटि के रूप में माना जाएगा। –

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

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