मैं एक वस्तु की तरह stringyfing कर रहा हूँ {'foo': 'bar'}
मैं स्ट्रिंग को किसी ऑब्जेक्ट में वापस कैसे ला सकता हूं?
मैं एक वस्तु की तरह stringyfing कर रहा हूँ {'foo': 'bar'}
मैं स्ट्रिंग को किसी ऑब्जेक्ट में वापस कैसे ला सकता हूं?
जवाबों:
आपको JSON.parse()
स्ट्रिंग की आवश्यकता है ।
var str = '{"hello":"world"}';
try {
var obj = JSON.parse(str); // this is how you parse a string into JSON
document.body.innerHTML += obj.hello;
} catch (ex) {
console.error(ex);
}
JSON.parse
के विपरीत है JSON.stringify
।
JSON.stringify
और JSON.parse
लगभग ऑपोसिट हैं, और "आमतौर पर" इस तरह की चीज काम करेगी:
var obj = ...;
var json = JSON.stringify(obj);
var obj2 = JSON.parse(json);
ताकि obj और obj2 "समान" हों।
हालाँकि इसके बारे में पता करने के लिए कुछ सीमाएँ हैं। जैसा कि आप साधारण वस्तुओं के साथ काम कर रहे हैं अक्सर ये मुद्दे मायने नहीं रखते। लेकिन मैं इस हेल्पर फ़ंक्शन का उपयोग करते हुए उनमें से कुछ का वर्णन यहां करूंगा:
function jsonrepack( obj ) { return JSON.parse(JSON.stringify(obj) ); }
आप केवल ownProperties
वस्तु प्राप्त करेंगे और प्रोटोटाइप खो देंगे:
var MyClass = function() { this.foo="foo"; }
MyClass.prototype = { bar:"bar" }
var o = new MyClass();
var oo = jsonrepack(o);
console.log(oo.bar); // undefined
console.log( oo instanceof MyClass ); // false
आप पहचान खो देंगे:
var o = {};
var oo = jsonrepack(o);
console.log( o === oo ); // false
कार्य न बचे:
jsonrepack( { f:function(){} } ); // Returns {}
दिनांक ऑब्जेक्ट स्ट्रिंग के रूप में समाप्त होते हैं:
jsonrepack(new Date(1990,2,1)); // Returns '1990-02-01T16:00:00.000Z'
अपरिभाषित मान न बचे:
var v = { x:undefined }
console.log("x" in v); // true
console.log("x" in jsonrepack(v)); // false
toJSON
फ़ंक्शन प्रदान करने वाली वस्तुएँ सही तरीके से व्यवहार नहीं कर सकती हैं।
x = { f:"foo", toJSON:function(){ return "EGAD"; } }
jsonrepack(x) // Returns 'EGAD'
मुझे यकीन है कि अन्य अंतर्निहित प्रकार के साथ भी समस्याएं हैं। (यह सब नोड.जेएस का उपयोग करके परीक्षण किया गया था ताकि आपको अपने वातावरण के आधार पर थोड़ा अलग व्यवहार मिल सके)।
जब यह फर्क पड़ता है यह कभी कभी के अतिरिक्त पैरामीटर का उपयोग कर दूर किया जा सकता JSON.parse
है और JSON.stringify
। उदाहरण के लिए:
function MyClass (v) {
this.date = new Date(v.year,1,1);
this.name = "an object";
};
MyClass.prototype.dance = function() {console.log("I'm dancing"); }
var o = new MyClass({year:2010});
var s = JSON.stringify(o);
// Smart unpack function
var o2 = JSON.parse( s, function(k,v){
if(k==="") {
var rv = new MyClass(1990,0,0);
rv.date = v.date;
rv.name = v.name;
return rv
} else if(k==="date") {
return new Date( Date.parse(v) );
} else { return v; } } );
console.log(o); // { date: <Mon Feb 01 2010 ...>, name: 'an object' }
console.log(o.constructor); // [Function: MyClass]
o.dance(); // I'm dancing
console.log(o2); // { date: <Mon Feb 01 2010 ...>, name: 'an object' }
console.log(o2.constructor) // [Function: MyClass]
o2.dance(); // I'm dancing
JSON SPEC
{ bar:"bar" }
(आपके प्रोटोटाइप से) एक वैधfoo
स्ट्रिंग नहीं माना जाता है क्योंकि एक स्ट्रिंग के बजाय एक चर है। वैध जॅसन की जरूरत key
है string
।
JSON.parse
। मैं सिर्फ चेतावनी दे रहा हूं कि बहुत सारे मामले हैं जो सही तरीके से नहीं निपटेंगे। यदि आप शुद्ध आदिम डेटा (कोई वर्ग, प्रोटोटाइप नहीं) और केवल JSON (कोई दिनांक, XML, HTML आदि) द्वारा समर्थित डेटाटिप्स का उपयोग कर रहे हैं तो आप ठीक हैं।
X = { foo:"bar" }
वही है X = { "foo":"bar" }
जो वही है X = {}; X.foo = "bar"
जो X={}; X["foo"] = "bar"
सभी 4 मामलों में समान है। इससे उत्पन्न JSON की वैधता पर कोई फर्क नहीं पड़ता है।
http://jsbin.com/tidob/1/edit?js,console,output
देशी JSON ऑब्जेक्ट में दो प्रमुख विधियाँ शामिल हैं।
1. JSON.parse()
2. JSON.stringify()
JSON.parse()
विधि JSON स्ट्रिंग को पार्स करता है - यानी मूल जावास्क्रिप्ट वस्तु के पुनर्निर्माण
var jsObject = JSON.parse(jsonString);
JSON.stringify () विधि एक जावास्क्रिप्ट ऑब्जेक्ट को स्वीकार करती है और अपने JSON के बराबर लौटाती है।
var jsonString = JSON.stringify(jsObject);
उपयोग करने के लिए अनुशंसित है JSON.parse
एक विकल्प है जो आप कर सकते हैं:
var myObject = eval('(' + myJSONtext + ')');
इस बारे में कैसा है
var parsed = new Function('return ' + stringifiedJSON )();
यह एक सुरक्षित विकल्प है eval
।
इसकी जांच करें।
http://jsfiddle.net/LD55x/
कोड:
var myobj = {};
myobj.name="javascriptisawesome";
myobj.age=25;
myobj.mobile=123456789;
debugger;
var str = JSON.stringify(myobj);
alert(str);
var obj = JSON.parse(str);
alert(obj);
$("#save").click(function () {
debugger
var xx = [];
var dd = { "firstname": "", "lastname": "", "address": "" };
var otable1 = $("#table1").dataTable().fnGetData();
for (var i = 0; i < otable1.length; i++) {
dd.firstname = otable1[i][0];
dd.lastname = otable1[i][1];
dd.address = otable1[i][2];
xx.push(dd);
var dd = { "firstname": "", "lastname": "", "address": "" };
}
JSON.stringify(alert(xx));
$.ajax({
url: '../Home/save',
type: 'POST',
data: JSON.stringify({ u: xx }),
contentType: 'application/json;',
dataType: 'json',
success: function (event) {
alert(event);
$("#table2").dataTable().fnDraw();
location.reload();
}
});
});
{foo: 'bar'}
वैध JSON नहीं है (जबकि यह एक मान्य जावास्क्रिप्ट अभिव्यक्ति है)।