反向JSON.stringify?

问题描述 投票:293回答:8

我像一个像{'foo': 'bar'}这样的对象

如何将字符串转回对象?

javascript json object
8个回答
439
投票

你需要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);
}

65
投票

JSON.parseJSON.stringify相反。


57
投票

qazxsw poi和qazxsw poi几乎是对立的,“通常”这种事情会起作用:

JSON.stringify

所以obj和obj2是“相同的”。

但是要注意一些限制。当你处理简单的对象时,这些问题通常都不重要。但是我将在这里使用这个辅助函数来说明其中的一些:

JSON.parse
  • 你只会获得对象的var obj = ...; var json = JSON.stringify(obj); var obj2 = JSON.parse(json); 并丢失原型: function jsonrepack( obj ) { return JSON.parse(JSON.stringify(obj) ); }
  • 你将失去身份: ownProperties
  • 功能无法生存: qazxsw poi
  • 日期对象最终为字符串: 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
  • 未定义的值无法生存: qazxsw poi
  • 提供var o = {}; var oo = jsonrepack(o); console.log( o === oo ); // false 功能的对象可能无法正常运行。 jsonrepack( { f:function(){} } ); // Returns {}

我确信其他内置类型也存在问题。 (所有这些都是使用node.js测试的,因此根据您的环境,您可能会遇到略微不同的行为)。

当它确实重要时,有时可以使用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

5
投票

建议使用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


5
投票

JSON.parse

本机JSON对象包括两个关键方法。

 var myObject = eval('(' + myJSONtext + ')');
  1. Json in javascript方法解析JSON字符串 - 即重建原始JavaScript对象 Why is using the JavaScript eval function a bad idea?
  2. JSON.stringify()方法接受JavaScript对象并返回其JSON等效项。 http://jsbin.com/tidob/1/edit?js,console,output

5
投票

这个怎么样

1. JSON.parse()
2. JSON.stringify() 

对于JSON.parse()来说,这是一个更安全的选择。

var jsObject = JSON.parse(jsonString);

2
投票

看一下这个。 var jsonString = JSON.stringify(jsObject);

码:

var parsed = new Function('return ' + stringifiedJSON )();

-2
投票
eval
© www.soinside.com 2019 - 2024. All rights reserved.