मेरा सर्वर साइड कोड एक मान लौटाता है जो सफलता पर एक json ऑब्जेक्ट है और विफलता पर एक स्ट्रिंग 'गलत' है। अब मैं कैसे जांच सकता हूं कि लौटाया गया मूल्य एक जेसन ऑब्जेक्ट है या नहीं?
मेरा सर्वर साइड कोड एक मान लौटाता है जो सफलता पर एक json ऑब्जेक्ट है और विफलता पर एक स्ट्रिंग 'गलत' है। अब मैं कैसे जांच सकता हूं कि लौटाया गया मूल्य एक जेसन ऑब्जेक्ट है या नहीं?
जवाबों:
यदि स्ट्रिंग JSON थी, तो jQuery.parseJSON () को "ऑब्जेक्ट" प्रकार की एक वस्तु वापस करनी चाहिए, इसलिए आपको केवल इस प्रकार की जांच करनी होगी typeof
var response=jQuery.parseJSON('response from server');
if(typeof response =='object')
{
// It is JSON
}
else
{
if(response ===false)
{
// the response was a string "false", parseJSON will convert it to boolean false
}
else
{
// the response was something else
}
}
"SyntaxError: JSON.parse: unexpected character"
त्रुटि! , मुझे लगता है कि सबसे अच्छा समाधान है कोशिश / कैच का उपयोग करें जो यहां कहा गया Serguei Fedorov
है: stackoverflow.com/questions/4295386/…
चुना हुआ समाधान वास्तव में मेरे लिए काम नहीं करता है क्योंकि मुझे ए
"Unexpected Token <"
क्रोम में त्रुटि। ऐसा इसलिए है क्योंकि पार्स के पार और अज्ञात चरित्र आते ही त्रुटि को फेंक दिया जाता है। हालाँकि, इस के आसपास एक तरीका है यदि आप अजाक्स के माध्यम से केवल स्ट्रिंग मान वापस कर रहे हैं (जो कि काफी उपयोगी हो सकता है यदि आप ajax अनुरोधों को संसाधित करने के लिए PHP या ASPX का उपयोग कर रहे हैं और शर्तों के आधार पर JSON नहीं लौट सकते हैं)
समाधान काफी सरल है, आप यह जांचने के लिए निम्न कर सकते हैं कि क्या यह एक वैध JSON रिटर्न था
var IS_JSON = true;
try
{
var json = $.parseJSON(msg);
}
catch(err)
{
IS_JSON = false;
}
जैसा कि मैंने पहले कहा है, यह समाधान है यदि आप या तो अपने AJAX अनुरोध से स्ट्रिंग प्रकार का सामान वापस कर रहे हैं या यदि आप मिश्रित प्रकार लौट रहे हैं।
false
भी वैध JSON है)। सवाल केवल एक बिंदु के बारे में है: यदि पार्स किया गया JSON-स्ट्रिंग एक बूलियन false
या ऑब्जेक्ट है तो अंतर कैसे करें
/**
* @param Object
* @returns boolean
*/
function isJSON (something) {
if (typeof something != 'string')
something = JSON.stringify(something);
try {
JSON.parse(something);
return true;
} catch (e) {
return false;
}
}
आप इसका उपयोग कर सकते हैं:
var myJson = [{"user":"chofoteddy"}, {"user":"bart"}];
isJSON(myJson); // true
मान्य करने का सबसे अच्छा तरीका है कि एक वस्तु टाइप JSON या सरणी के रूप में है:
var a = [],
o = {};
toString.call(o) === '[object Object]'; // true
toString.call(a) === '[object Array]'; // true
a.constructor.name === 'Array'; // true
o.constructor.name === 'Object'; // true
लेकिन, कड़ाई से बोलते हुए, एक सरणी JSON सिंटैक्स का हिस्सा है। इसलिए, निम्नलिखित दो उदाहरण JSON प्रतिक्रिया का हिस्सा हैं:
console.log(response); // {"message": "success"}
console.log(response); // {"user": "bart", "id":3}
तथा:
console.log(response); // [{"user":"chofoteddy"}, {"user":"bart"}]
console.log(response); // ["chofoteddy", "bart"]
यदि आप AJAX के माध्यम से जानकारी लाने के लिए JQuery का उपयोग करते हैं। मैं आपको "डेटा टाइप" में डालकर "जोंस" मान को रखने की सलाह देता हूं, इस तरह अगर आपको JSON मिलता है या नहीं, JQuery इसे आपके लिए मान्य करता है और इसे उनके कार्यों "सफलता" और "त्रुटि" के माध्यम से ज्ञात करता है। उदाहरण:
$.ajax({
url: 'http://www.something.com',
data: $('#formId').serialize(),
method: 'POST',
dataType: 'json',
// "sucess" will be executed only if the response status is 200 and get a JSON
success: function (json) {},
// "error" will run but receive state 200, but if you miss the JSON syntax
error: function (xhr) {}
});
यदि आपके पास jQuery है, तो PlainObject का उपयोग करें ।
if ($.isPlainObject(my_var)) {}
true
।
var checkJSON = function(m) {
if (typeof m == 'object') {
try{ m = JSON.stringify(m); }
catch(err) { return false; } }
if (typeof m == 'string') {
try{ m = JSON.parse(m); }
catch (err) { return false; } }
if (typeof m != 'object') { return false; }
return true;
};
checkJSON(JSON.parse('{}')); //true
checkJSON(JSON.parse('{"a":0}')); //true
checkJSON('{}'); //true
checkJSON('{"a":0}'); //true
checkJSON('x'); //false
checkJSON(''); //false
checkJSON(); //false
चूँकि यह सिर्फ झूठी और json वस्तु है, आप इसकी जाँच क्यों नहीं करते कि क्या यह झूठा है, अन्यथा यह json होना चाहिए।
if(ret == false || ret == "false") {
// json
}
मुझे पता है कि इस धागे का जवाब पहले ही दिया जा चुका है, लेकिन यहां आने से वास्तव में मेरी समस्याओं का समाधान नहीं हुआ, मुझे यह समारोह कहीं और मिला। हो सकता है कि यहां आने वाला कोई व्यक्ति उनके लिए कुछ काम का हो;
function getClass(obj) {
if (typeof obj === "undefined")
return "undefined";
if (obj === null)
return "null";
return Object.prototype.toString.call(obj)
.match(/^\[object\s(.*)\]$/)[1];
}
var data = 'json string ?';
var jdata = null;
try
{
jdata = $.parseJSON(data);
}catch(e)
{}
if(jdata)
{
//use jdata
}else
{
//use data
}
मुझे वास्तव में स्वीकृत उत्तर पसंद नहीं है। सबसे पहले और इसके लिए jQuery की आवश्यकता होती है, जो हमेशा उपलब्ध या आवश्यक नहीं होता है। दूसरी बात, यह उस वस्तु का एक पूर्णत: मानकीकरण करता है जो मेरे पास है। यहां एक सरल कार्य है जो पूरी तरह से पता लगाता है कि क्या मान JSON की तरह है, सामान्यता के लिए लेशश लाइब्रेरी के कुछ हिस्सों से अधिक कुछ भी नहीं ।
import * as isNull from 'lodash/isNull'
import * as isPlainObject from 'lodash/isPlainObject'
import * as isNumber from 'lodash/isNumber'
import * as isBoolean from 'lodash/isBoolean'
import * as isString from 'lodash/isString'
import * as isArray from 'lodash/isArray'
function isJSON(val) {
if (isNull(val)
|| isBoolean(val)
|| isString(val))
return true;
if (isNumber(val))
return !isNaN(val) && isFinite(val)
if (isArray(val))
return Array.prototype.every.call(val, isJSON)
if (isPlainObject(val)) {
for (const key of Object.keys(val)) {
if (!isJSON(val[key]))
return false
}
return true
}
return false
}
मैंने इसे npm में एक पैकेज के रूप में डालने का समय भी लिया है: https://npmjs.com/package/is-json-object । इसे ब्राउज़र में प्राप्त करने के लिए वेबपैक जैसी किसी चीज़ के साथ उपयोग करें ।
आशा है कि यह किसी की मदद करता है!
मैं JSON ऑब्जेक्ट को मान्य करने के लिए इसका उपयोग कर रहा हूं
function isJsonObject(obj) {
try {
JSON.parse(JSON.stringify(obj));
} catch (e) {
return false;
}
return true;
}
मैं JSON स्ट्रिंग को मान्य करने के लिए इसका उपयोग कर रहा हूं
function isJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
आपको हमेशा जसन लौटाना चाहिए , लेकिन उसकी स्थिति बदलनी चाहिए , या निम्नलिखित उदाहरण में ResponseCode प्रॉपर्टी:
if(callbackResults.ResponseCode!="200"){
/* Some error, you can add a message too */
} else {
/* All fine, proceed with code */
};