javascript - AJAX: जांचें कि स्ट्रिंग JSON है या नहीं?
validation (4)
मेरी जावास्क्रिप्ट कभी-कभी इस पंक्ति पर दुर्घटनाग्रस्त हो जाती है:
var json = eval('(' + this.responseText + ')');
क्रैश तब होते हैं जब eval()
का तर्क JSON नहीं है। क्या यह कॉल करने से पहले स्ट्रिंग JSON है या नहीं, यह जांचने का कोई तरीका है?
मैं ढांचे का उपयोग नहीं करना चाहता - क्या इस काम को केवल eval()
का उपयोग करने का कोई तरीका है? (एक अच्छा कारण है, मैं वादा करता हूँ।)
Try-catch
बजाय Promise
Try-catch
:
npm install is-json-promise ; //for NodeJS environment.
या
String.IsJSON = (candidate) =>
new Promise(
(resolve, reject) => resolve(JSON.parse(candidate))
)
;
बक्सों का इस्तेमाल करें :
String.IsJSON(`iam here`)
.then((object) => console.info(object))
.catch((error) => alert('Waww, i cannot be JSON')) ; // promise will run catch
या
String.IsJSON(`{"welcome":"Hello"}`)
.then((object) => console.info(object)) // promise will run "then"
.catch((error) => alert('Waww, i cannot be JSON')) ;
मैं अत्यधिक अनुशंसा करता हूं कि आप JSON से क्रमबद्ध करने के लिए जावास्क्रिप्ट JSON लाइब्रेरी का उपयोग करें। eval()
एक सुरक्षा जोखिम है जिसे तब तक उपयोग नहीं किया जाना चाहिए जबतक कि आप पूरी तरह से निश्चित नहीं हैं कि इसका इनपुट स्वच्छ और सुरक्षित है।
एक JSON लाइब्रेरी के साथ, गैर-JSON इनपुट को संभालने के लिए बस कोशिश / पकड़-ब्लॉक में कॉल को इसके parse()
समकक्ष पर लपेटें:
try
{
var jsonObject = JSON.parse(yourJsonString);
}
catch(e)
{
// handle error
}
हैर्स का jQuery विकल्प ...
try
{
var jsonObject = jQuery.parseJSON(yourJsonString);
}
catch(e)
{
// handle error
}
try-catch
दृष्टिकोण के आधार पर समस्या यह है कि JSON.parse('123') = 123
और यह अपवाद नहीं फेंक देगा। इसलिए, try-catch
करने के अलावा, हमें निम्न प्रकार की जांच करने की आवश्यकता है:
function isJsonStr(str) {
var parsedStr = str;
try {
parsedStr = JSON.parse(str);
} catch (e) {
return false;
}
return typeof parsedStr == 'object'
}