反向的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.parseJSON.stringify相反。

JSON.stringifyJSON.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.parseJSON.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() 
  1. JSON.parse()方法parsing一个JSONstring – 即重build原始的JavaScript对象

    var jsObject = JSON.parse(jsonString);

  2. 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(); } }); });