jquery - मैं कैसे जांच सकता हूं कि कोई मान एक जेसन ऑब्जेक्ट है या नहीं?




json object (8)

आपको हमेशा जेसन वापस करना चाहिए, लेकिन इसकी स्थिति बदलना चाहिए, या उदाहरण में ResponseCode प्रॉपर्टी:

if(callbackResults.ResponseCode!="200"){
    /* Some error, you can add a message too */
} else {
    /* All fine, proceed with code */
};

मेरा सर्वर साइड कोड एक मान देता है जो सफलता पर एक जेसन ऑब्जेक्ट है और विफलता पर एक स्ट्रिंग 'झूठी' है। अब मैं कैसे जांच सकता हूं कि लौटाया गया मूल्य एक जेसन ऑब्जेक्ट है या नहीं?


किसी ऑब्जेक्ट को सत्यापित करने का सबसे अच्छा तरीका JSON या सरणी प्रकार निम्नानुसार है:

var a = [],
    o = {};

समाधान 1

toString.call(o) === '[object Object]'; // true
toString.call(a) === '[object Array]'; // true

समाधान 2

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"]

यहां तक ​​कि एक साधारण बूलियन ऑपरेटर या एक पूर्णांक JSON के सिंटैक्स में मान्य के रूप में लिया जा सकता है। इससे हमें कई और मान्यताओं का सामना करना पड़ेगा। इसलिए, जांच करने के लिए सबसे व्यवहार्य है कि किसी भी JSON वाक्यविन्यास है, तो तरीका होगा:

समाधान 3

function isJSON (something) {
    if (typeof something != 'string')
        something = JSON.stringify(something);

    try {
        JSON.parse(something);
        return true;
    } catch (e) {
        return false;
    }
}

AJAX / JQuery

यदि आप 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) {}
});

मुझे पता है कि इस धागे का उत्तर पहले ही दिया गया है, लेकिन यहां आने से मेरी समस्याएं वास्तव में हल नहीं हुईं, मुझे यह कार्य कहीं और मिला। शायद यहां आने वाले किसी को यह उनके लिए कुछ उपयोग करने के लिए मिलेगा;

function getClass(obj) {
  if (typeof obj === "undefined")
    return "undefined";
  if (obj === null)
    return "null";
  return Object.prototype.toString.call(obj)
    .match(/^\[object\s(.*)\]$/)[1];
}

मुझे वास्तव में स्वीकृत उत्तर पसंद नहीं है। सबसे पहले और सबसे महत्वपूर्ण यह jQuery की आवश्यकता है, जो हमेशा उपलब्ध या आवश्यक नहीं है। दूसरा, यह ऑब्जेक्ट का एक पूर्ण स्ट्रिंगफिकेशन करता है जो मेरे लिए अधिक है। यहां एक सरल कार्य है जो सामान्य रूप से पता लगाता है कि जेएसओएन की तरह एक मान lodash के लिए lodash लाइब्रेरी के कुछ हिस्सों से ज्यादा कुछ नहीं कर रहा है।

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
}

मैंने इसे पैकेज के रूप में एनपीएम में रखने के लिए भी समय निकाला है: https://npmjs.com/package/is-json-object । ब्राउज़र में इसे प्राप्त करने के लिए lodash जैसे कुछ के साथ इसे एक साथ उपयोग करें।

उम्मीद है कि यह किसी की मदद करता है!


यदि आपके पास jQuery है, तो isPlainObject उपयोग isPlainObject

if ($.isPlainObject(my_var)) {}

मैं 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;
}

चुना गया समाधान वास्तव में मेरे लिए काम नहीं करता है क्योंकि मुझे एक मिलता है

     "Unexpected Token <" 

क्रोम में त्रुटि ऐसा इसलिए है क्योंकि जैसे ही पार्स आती है और अज्ञात चरित्र के रूप में त्रुटि फेंक दी जाती है। हालांकि, अगर आप AJAX के माध्यम से केवल स्ट्रिंग मान लौट रहे हैं तो यह एक तरीका है (यदि आप AJAX अनुरोधों को संसाधित करने के लिए PHP या ASPX का उपयोग कर रहे हैं और शायद शर्तों के आधार पर JSON वापस नहीं कर सकते हैं)

समाधान काफी सरल है, आप यह जांचने के लिए निम्नलिखित कर सकते हैं कि यह वैध JSON रिटर्न था या नहीं

       var IS_JSON = true;
       try
       {
               var json = $.parseJSON(msg);
       }
       catch(err)
       {
               IS_JSON = false;
       }                

जैसा कि मैंने पहले कहा है, यह समाधान है कि आप या तो अपने AJAX अनुरोध से स्ट्रिंग प्रकार की सामग्री लौट रहे हैं या यदि आप मिश्रित प्रकार लौट रहे हैं।


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




object