反向的JSON.stringify?
我正在绑定一个对象,如{'foo': 'bar'}
我怎样才能把string返回到一个对象?
你需要JSON.parse()
这个string。
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
几乎是JSON.stringify
,“通常”这种事情将工作:
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 {}
-
date对象最终为string:
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'
我相信也有其他内置types的问题。 (所有这些都是使用node.js进行testing的,因此您可能会根据您的环境稍微有所不同)。
当它确实很重要时,有时可以使用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
这个怎么样
var parsed = new Function('return ' + stringifiedJSON )();
这是一个更安全的替代eval
。
var stringifiedJSON = '{"hello":"world"}'; var parsed = new Function('return ' + stringifiedJSON)(); alert(parsed.hello);
build议使用JSON.parse
你可以做另一种select:
var myObject = eval('(' + myJSONtext + ')');
JSON在JavaScript中
为什么使用JavaScript的eval函数是一个坏主意?
http://jsbin.com/tidob/1/edit?js,console,output
本机JSON对象包含两个关键方法。
1. JSON.parse() 2. JSON.stringify()
-
JSON.parse()
方法parsing一个JSONstring – 即重build原始的JavaScript对象var jsObject = JSON.parse(jsonString);
-
JSON.stringify()方法接受一个JavaScript对象并返回其JSON等效。
var jsonString = JSON.stringify(jsObject);
看一下这个。
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(); } }); });