反向JSON.stringify?

the*_*cat 321 javascript json object

我正在像一个对象 {'foo': 'bar'}

如何将字符串转回对象?

Cha*_*ell 472

你需要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);
}
Run Code Online (Sandbox Code Playgroud)

  • 专业提示:始终将JSON.parse()放入try-catch结构中,因为该方法可能会使您的Node/Js崩溃 (8认同)

Nie*_*sol 68

JSON.parse与...相反JSON.stringify.


Mic*_*son 59

JSON.stringify并且JSON.parse几乎是对手,并且"通常"这种事情会起作用:

var obj = ...;
var json = JSON.stringify(obj);  
var obj2 = JSON.parse(json);
Run Code Online (Sandbox Code Playgroud)

所以obj和obj2是"相同的".

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

function jsonrepack( obj ) { return JSON.parse(JSON.stringify(obj) ); }
Run Code Online (Sandbox Code Playgroud)

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

当它不管它有时可以使用的附加参数来克服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
Run Code Online (Sandbox Code Playgroud)

  • 我读OP说:"我将javascript对象转换为JSON字符串,现在我想将其转换回来 - 我该怎么做?" 所有其他答案都说使用`JSON.parse`.我只是警告说很多情况都无法正确处理.如果你使用纯原始数据(没有类,原型),只使用JSON支持的数据类型(没有日期,XML,HTML等)那么你就可以了. (3认同)
  • 这是一个非常全面的答案,更值得成为公认的答案.谢谢你的出色工作. (2认同)

Min*_*iel 5

推荐使用 JSON.parse

你可以做一个替代方案:

 var myObject = eval('(' + myJSONtext + ')');
Run Code Online (Sandbox Code Playgroud)

Json在javascript中

为什么使用JavaScript eval函数是一个坏主意?

  • 这可能更容易受到代码篡改的影响 (2认同)

Exc*_*ion 5

这个怎么样

var parsed = new Function('return ' + stringifiedJSON )();
Run Code Online (Sandbox Code Playgroud)

这是一个更安全的替代方案eval.

var stringifiedJSON = '{"hello":"world"}';
var parsed = new Function('return ' + stringifiedJSON)();
alert(parsed.hello);
Run Code Online (Sandbox Code Playgroud)


Sha*_*ool 5

http://jsbin.com/tidob/1/edit?js,console,output

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

1. JSON.parse()
2. JSON.stringify() 
Run Code Online (Sandbox Code Playgroud)
  1. JSON.parse()方法解析JSON字符串 - 即重建原始JavaScript对象

    var jsObject = JSON.parse(jsonString);

  2. JSON.stringify()方法接受JavaScript对象并返回其JSON等效项.

    var jsonString = JSON.stringify(jsObject);