javascript - किसी ऑब्जेक्ट में एक JSON स्ट्रिंग को सुरक्षित रूप से बदलना




(18)

JSON.parse(jsonString) एक शुद्ध जावास्क्रिप्ट दृष्टिकोण है जब तक आप एक उचित आधुनिक ब्राउज़र की गारंटी दे सकते हैं।

JSON डेटा की एक स्ट्रिंग को देखते हुए, आप उस स्ट्रिंग को जावास्क्रिप्ट ऑब्जेक्ट में सुरक्षित रूप से कैसे बदल सकते हैं?

जाहिर है आप इस तरह कुछ के साथ असुरक्षित कर सकते हैं ...

var obj = eval("(" + json + ')');

... लेकिन यह हमें अन्य कोड वाले जेसन स्ट्रिंग के लिए कमजोर छोड़ देता है, जो इसे केवल eval के लिए बहुत खतरनाक लगता है।


आप फ़िल्टर करने के लिए reviver फ़ंक्शन का भी उपयोग कर सकते हैं।

var data = JSON.parse(jsonString, function reviver(key, value) {
   //your code here to filter
});

अधिक जानकारी के लिए JSON.parse(jsonString) पढ़ें


ऑब्जेक्ट को JSON में कनवर्ट करना, और फिर इसे पार्स करना, मेरे लिए काम करता है, जैसे:

JSON.parse(JSON.stringify(object))

JSON.parse(jsonString);

json.parse वस्तु में बदल जाएगा।


parse() विधि का उपयोग parse() का सबसे आसान तरीका:

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

तो आप Json तत्वों के मान प्राप्त कर सकते हैं, उदाहरण के लिए:

var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;

documentation में वर्णित jQuery का उपयोग करना:

JSON.parse(jsonString);

मुझे एक "बेहतर" तरीका मिला:

कॉफीस्क्रिप्ट में:

try data = JSON.parse(jqxhr.responseText)
data ||= { message: 'Server error, please retry' }

जावास्क्रिप्ट में:

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});

बस मस्ती के लिए, फ़ंक्शन का उपयोग करने का तरीका यहां दिया गया है:

 jsonObject = (new Function('return ' + jsonFormatData))()

ऐसा लगता है कि यह मुद्दा है:

AJAX websocket आदि के माध्यम से एक इनपुट प्राप्त होता है, और यह हमेशा स्ट्रिंग प्रारूप में होगा - लेकिन आपको यह जानना होगा कि यह JSON.parsable है या नहीं। दोगुना है, कि यदि आप इसे हमेशा JSON.parse के माध्यम से चलाते हैं, तो प्रोग्राम मई को 'सफलतापूर्वक' जारी रख सकता है लेकिन आपको अभी भी ड्रेस्ड "त्रुटि: अप्रत्याशित टोकन 'x' के साथ कंसोल में फेंकने वाली त्रुटि दिखाई देगी।

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});

आधिकारिक तौर पर दस्तावेज :

JSON.parse() विधि एक JSON स्ट्रिंग को JSON.parse() , जो स्ट्रिंग द्वारा वर्णित जावास्क्रिप्ट मान या ऑब्जेक्ट का निर्माण करती है। परिणामस्वरूप ऑब्जेक्ट पर लौटने से पहले एक वैकल्पिक reviver फ़ंक्शन प्रदान किया जा सकता है।

वाक्य - विन्यास

JSON.parse(text[, reviver])

पैरामीटर

टेक्स्ट

जेएसओएन के रूप में पार्स करने के लिए स्ट्रिंग। JSON वाक्यविन्यास के विवरण के लिए JSON ऑब्जेक्ट देखें।

पुनरुद्धार (वैकल्पिक)

यदि कोई फ़ंक्शन, यह निर्धारित करता है कि मूल रूप से पार्सिंग द्वारा उत्पादित मूल्य को वापस करने से पहले परिवर्तित किया जाता है।

प्रतिलाभ की मात्रा

दिए गए JSON पाठ से संबंधित ऑब्जेक्ट।

अपवाद

स्ट्रिंग को स्ट्रिंग मान्य JSON नहीं है, तो एक SyntaxError अपवाद फेंकता है।


$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

कॉलबैक लौटाया गया डेटा पास कर दिया गया है, जो जेएसओएन संरचना द्वारा परिभाषित एक जावास्क्रिप्ट ऑब्जेक्ट या सरणी होगी और $.parseJSON() विधि का उपयोग करके पार्स किया जाएगा।


JQuery विधि अब बहिष्कृत है। इसके बजाय इस विधि का प्रयोग करें:

let jsonObject = JSON.parse(jsonString);

बहिष्कृत jQuery कार्यक्षमता का उपयोग कर मूल जवाब :

यदि आप jQuery का उपयोग कर रहे हैं तो बस इसका उपयोग करें:

jQuery.parseJSON( jsonString );

यह वही है जो आप खोज रहे हैं (jQuery documentation देखें)।


मैं थोड़ी देर के लिए json_sans_eval का सफलतापूर्वक उपयोग कर रहा हूं। अपने लेखक के अनुसार, यह json2.js से अधिक सुरक्षित है।


JSON.parse () किसी JSON ऑब्जेक्ट को फ़ंक्शन में पास किए गए किसी भी JSON स्ट्रिंग को परिवर्तित करता है।

बेहतर समझने के लिए अपने ब्राउज़र के निरीक्षण तत्व को खोलने के लिए F12 दबाएं और निम्न आदेश लिखने के लिए कंसोल पर जाएं: -

var response = '{"result":true,"count":1}'; //sample json object(string form)
JSON.parse(response); //converts passed string to JSON Object.

अब आदेश चलाएं: -

console.log(JSON.parse(response));

आप ऑब्जेक्ट के रूप में आउटपुट प्राप्त करेंगे {परिणाम: सत्य, गिनती: 1}।

उस ऑब्जेक्ट का उपयोग करने के लिए, आप इसे वैरिएबल को असाइन कर सकते हैं चलो कहते हैं obj: -

var obj = JSON.parse(response);

अब obj और dot (।) ऑपरेटर का उपयोग करके आप JSON ऑब्जेक्ट के गुणों तक पहुंच सकते हैं।

आदेश चलाने की कोशिश करें

console.log(obj.result);

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

JSON.safeParse = function (input, def) {
  // Convert null to empty object
  if (!input) {
    return def || {};
  } else if (Object.prototype.toString.call(input) === '[object Object]') {
    return input;
  }
  try {
    return JSON.parse(input);
  } catch (e) {
    return def || {};
  }
};

यदि आप jQuery का उपयोग कर रहे हैं, तो आप $.getJSON(url, function(data) { }); भी कर सकते हैं $.getJSON(url, function(data) { });

फिर आप data.key1.something , data.key1.something_else इत्यादि जैसी चीजें कर सकते हैं।


यदि आप चाहते हैं कि इस विधि का उपयोग इस तरह किया जा सके। यहां डेटा ऑब्जेक्ट जिसे आप पूर्व चाहते हैं: डेटा = '{परिणाम: सत्य, गिनती: 1}'

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

यह विधि वास्तव में नोडज में मदद करती है यदि आप सीरियल पोर्ट प्रोग्रामिंग के साथ काम कर रहे हैं


मैं इसे करने के अन्य तरीकों के बारे में निश्चित नहीं हूं लेकिन प्रोटोटाइप (JSON ट्यूटोरियल) में आप इसे कैसे करते हैं।

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

तर्क के रूप में evalJSON () को कॉल करना तर्क के रूप में आने वाली स्ट्रिंग को sanitizes।


चूँकि <script> टैग को समान उत्पत्ति नीति से छूट दी गई है जो वेब दुनिया में सुरक्षा की आवश्यकता है, while(1) JSON प्रतिक्रिया में जोड़े जाने पर <script> टैग में इसके दुरुपयोग को रोकता है।





javascript json