javascript - जावास्क्रिप्ट में पार्स JSON?
parsing (11)
JSON.parse () किसी JSON ऑब्जेक्ट को फ़ंक्शन में पास किए गए किसी भी JSON स्ट्रिंग को परिवर्तित करता है।
बेहतर समझने के लिए, अपने ब्राउज़र के निरीक्षण तत्व को खोलने के लिए F12 दबाएं, और निम्न आदेश लिखने के लिए कंसोल पर जाएं:
var response = '{"result":true,"count":1}'; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.
अब आदेश चलाएं:
console.log(JSON.parse(response));
आपको ऑब्जेक्ट के रूप में आउटपुट मिलेगा {परिणाम: सत्य, गिनती: 1}।
उस ऑब्जेक्ट का उपयोग करने के लिए, आप इसे चर के लिए असाइन कर सकते हैं, obj
लें obj
:
var obj = JSON.parse(response);
अब obj
और dot (।) ऑपरेटर का उपयोग करके आप JSON ऑब्जेक्ट के गुणों तक पहुंच सकते हैं।
आदेश चलाने की कोशिश करें
console.log(obj.result);
इस प्रश्न का उत्तर यहां दिया गया है:
मैं जावास्क्रिप्ट में एक JSON स्ट्रिंग पार्स करना चाहता हूँ। प्रतिक्रिया कुछ ऐसा है
var response = '{"result":true,"count":1}';
मैं मूल्य result
कैसे प्राप्त कर सकता हूं और इससे कैसे count
सकता हूं?
अधिकांश ब्राउज़र JSON.parse()
समर्थन करते हैं, जिसे ईसीएमए -262 5 वें संस्करण में परिभाषित किया गया है (यह निर्दिष्ट करता है कि जावास्क्रिप्ट चालू है)। इसका उपयोग सरल है:
var json = '{"result":true,"count":1}',
obj = JSON.parse(json);
alert(obj.count);
उन ब्राउज़रों के लिए जिन्हें आप json2.js का उपयोग करके इसे कार्यान्वित नहीं कर सकते हैं।
जैसा कि टिप्पणियों में उल्लेख किया गया है, यदि आप पहले से ही jQuery का उपयोग कर रहे हैं, तो $.parseJSON
फ़ंक्शन है जो JSON.parse
उपलब्ध है या पुराने ब्राउज़र में eval
का एक रूप है। हालांकि, यह अतिरिक्त, अनावश्यक जांच करता है जो JSON.parse
द्वारा भी किया जाता है, इसलिए सर्वोत्तम प्रदर्शन के लिए मैं इसे इस तरह उपयोग करने की अनुशंसा करता हूं:
var json = '{"result":true,"count":1}',
obj = JSON && JSON.parse(json) || $.parseJSON(json);
यह सुनिश्चित करेगा कि आप नेटिव पार्सिंग फ़ंक्शन को पास करने से पहले स्ट्रिंग पर jQuery प्रदर्शन JSON.parse
जांच करने के बजाए तुरंत मूल JSON.parse
उपयोग करें।
ऐसा करने का एक आसान तरीका:
var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
जैसा कि कई अन्य लोगों ने उल्लेख किया है, अधिकांश ब्राउज़र JSON.parse
और JSON.stringify
समर्थन करते हैं।
अब, मैं यह भी जोड़ना चाहूंगा कि यदि आप AngularJS (जिसे मैं अत्यधिक अनुशंसा करता हूं) का उपयोग कर रहा हूं, तो यह आपको आवश्यक कार्यक्षमता भी प्रदान करता है:
var myJson = '{"result": true, "count": 1}';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)
मैं बस एक और विकल्प प्रदान करने के लिए AngularJS के बारे में सामान जोड़ना चाहता था। ध्यान दें कि AngularJS आधिकारिक तौर पर इंटरनेट एक्सप्लोरर 8 (और पुराने संस्करणों, उस मामले के लिए) का समर्थन नहीं करता है, हालांकि अनुभव के माध्यम से अधिकांश सामान बहुत अच्छी तरह से काम करते हैं।
मैंने सोचा कि JSON.parse(myObject)
काम करेगा। लेकिन ब्राउज़रों के आधार पर, यह eval('('+myObject+')')
का उपयोग करने लायक हो सकता है eval('('+myObject+')')
। जेएसओएन में बहु-स्तर की सूची के लिए एकमात्र मुद्दा मैं देखने की सिफारिश कर सकता हूं।
यदि आप दोजो टूलकिट का उपयोग करते हैं:
require(["dojo/json"], function(JSON){
JSON.parse('{"hello":"world"}', true);
});
यदि आप इसे किसी बाहरी साइट से प्राप्त कर रहे हैं तो यह jQuery के getJSON का उपयोग करने में सहायक हो सकता है। यदि यह एक सूची है तो आप इसे $ .each के साथ पुन: सक्रिय कर सकते हैं
$.getJSON(url, function (json) {
alert(json.result);
$.each(json.list, function (i, fb) {
alert(fb.result);
});
});
यदि आप एक स्ट्रिंग वेरिएबल (एक अच्छी तरह से गठित JSON स्ट्रिंग) को JSON.parse से एमवीसी @ व्यूबैग से पास करते हैं, जिसमें दोहराव है, '' 'उद्धरण के रूप में, आपको JSON.parse ( jsonstring
) से पहले इसे संसाधित करने की आवश्यकता है।
var jsonstring = '@ViewBag.jsonstring';
jsonstring = jsonstring.replace(/"/g, '"');
यदि आप पुराने ब्राउज़र के लिए JSON 3 का उपयोग करना चाहते हैं, तो आप इसे सशर्त रूप से लोड कर सकते हैं:
<script>
window.JSON ||
document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>
अब मानक window.JSON
ऑब्जेक्ट आपके लिए उपलब्ध है इससे कोई फर्क नहीं पड़ता कि कोई क्लाइंट कौन सा ब्राउज़र चला रहा है।
लाइब्रेरी का उपयोग किए बिना आप eval
उपयोग कर सकते हैं - केवल एक ही समय का उपयोग करना चाहिए। हालांकि पुस्तकालय का उपयोग करना सुरक्षित है।
जैसे ...
var response = '{"result":true , "count":1}';
var parsedJSON = eval('('+response+')');
var result=parsedJSON.result;
var count=parsedJSON.count;
alert('result:'+result+' count:'+count);
parse()
विधि का उपयोग parse()
का सबसे आसान तरीका:
var response = '{"a":true,"b":1}';
var JsonObject= JSON.parse(response);
यह मानों को कैसे प्राप्त करें इसका एक उदाहरण है:
var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;