मेरे पास पायथन में एक स्ट्रिंग है, मैं जानना चाहता हूं कि क्या यह वैध JSON है।
json.loads(mystring)
यदि स्ट्रिंग JSON नहीं है, लेकिन मैं एक त्रुटि उठाऊंगा, लेकिन मैं एक अपवाद को पकड़ना नहीं चाहता।
मुझे ऐसा कुछ चाहिए, लेकिन यह काम नहीं करता है:
if type(mysrting) == dict:
myStrAfterLoading = json.loads(mystring)
else:
print "invalid json passed"
क्या मुझे यह देखने के लिए उस मान को पकड़ना होगा कि क्या मेरा स्ट्रिंग JSON है?
उत्तर:
उत्तर № 1 के लिए 33सही उत्तर है: को पकड़ना नहीं चाहते ValueError
.
उदाहरण पायथन स्क्रिप्ट एक बूलियन लौटाता है यदि एक स्ट्रिंग वैध जसन है:
import json
def is_json(myjson):
try:
json_object = json.loads(myjson)
except ValueError, e:
return False
return True
print is_json("{}") # prints True
print is_json("{asdf}") # prints False
print is_json("{"age":100}") # prints True
print is_json("{"age":100 }") # prints False
print is_json("{"age":100 }") # prints True
जवाब के लिए 20 № 2
स्ट्रिंग को सत्यापित करने के लिए इसे पार्स करने की आवश्यकता होगी -इसलिए अगर आपने जाँच की तो यह शाब्दिक रूप से दो बार लंबी होगी। अपवाद को पकड़ना सबसे अच्छा तरीका है। दिलचस्प है, आप अभी भी एक-इतर शैली अभिव्यक्ति का उपयोग कर सकते हैं:
try:
json_object = json.loads(json_string)
except ValueError, e:
pass # invalid json
else:
pass # valid json
जवाब के लिए 10 № 3
क्या कोई कारण नहीं है कि आप अपवाद को पकड़ना नहीं चाहते हैं?
ध्यान रखें कि परीक्षण और पकड़ना aअपवाद पायथन में बहुत तेजी से हो सकता है, और अक्सर चीज़ों को करने का पाइथोनिक तरीका है, टाइप के लिए परीक्षण के बजाय (मूल रूप से, विश्वास बतख टाइपिंग और तदनुसार प्रतिक्रिया)।
अपने दिमाग को थोड़ा और आराम देने के लिए, यहाँ एक नज़र डालें: पाइथन बनाम अगर कोशिश को छोड़कर
यदि आप "अभी भी पठनीयता के बारे में चिंतित हैं, तो यह बताने के लिए कोड में एक टिप्पणी जोड़ें कि आप" कोशिश / छोड़कर का उपयोग क्यों कर रहे हैं;
मैं जावा बैकग्राउंड से आने वाले अतीत में इस दृष्टिकोण से जूझता था, लेकिन यह है वास्तव में पायथन में ऐसा करने का सबसे सरल तरीका ... और सरल जटिल से बेहतर है।
उत्तर के लिए -3 № 4
जब आप निम्नानुसार प्रकारों का उपयोग कर सकते हैं तो पार्सिंग क्यों:
def is_json(myjson):
return type(myjson) == type({})
def is_json_arr(myjson):
return type(myjson) == type([{}])