我正在追问像{'foo': 'bar'}
如何将字符串转回对象?
答案 0 :(得分:443)
您需要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);
}
答案 1 :(得分:65)
JSON.parse
与JSON.stringify
相反。
答案 2 :(得分:57)
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'
我确信其他内置类型也存在问题。 (所有这些都是使用node.js测试的,因此根据您的环境,您可能会遇到略微不同的行为。)
如果确实重要,有时可以使用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
答案 3 :(得分:5)
建议使用JSON.parse
您可以选择其他方式:
var myObject = eval('(' + myJSONtext + ')');
答案 4 :(得分:5)
这个怎么样
var parsed = new Function('return ' + stringifiedJSON )();
这是eval
的更安全的选择。
var stringifiedJSON = '{"hello":"world"}';
var parsed = new Function('return ' + stringifiedJSON)();
alert(parsed.hello);
答案 5 :(得分:5)
http://jsbin.com/tidob/1/edit?js,console,output
本机JSON对象包括两个关键方法。
1. JSON.parse()
2. JSON.stringify()
JSON.parse()
方法解析JSON字符串 - 即重建原始JavaScript对象
var jsObject = JSON.parse(jsonString);
JSON.stringify()方法接受JavaScript对象并返回其JSON等效项。
var jsonString = JSON.stringify(jsObject);
答案 6 :(得分:2)
检查出来。
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);
答案 7 :(得分:0)
这个部分解决方案怎么样?
我想存储(使用 Config 节点)一个全局 bigobj,带有数据 + 方法(作为导入外部库的替代方法),在我的流程中的许多功能节点中使用:
奇怪,但它有效: 全局变量'bigobj':
{
some[]more[]{dx:"here"} , // array of objects with array of objects. The 'Config' node requires JSON.
.....
"get_dx": "function( d,p) { return this.some[d].more[p].dx; }" // test function
}
即一个函数的 JSON 版本......(全部在一行中 :( )
使用: 在函数节点内部:
var bigO = global.get("bigobj");
function callJSONMethod(obj, fname, a, b, c, d){
// see: https://stackoverflow.com/questions/49125059/how-to-pass-parameters-to-an-eval-based-function-injavascript
var wrap = s => "{ return " + obj[fname] + " };" //return the block having function expression
var func = new Function(wrap(obj[fname]));
return func.call( null ).call( obj, a, b, c, d); //invoke the function using arguments
}
msg.payload =callJSONMethod(bigO, "get_dx", 2, 2);
return msg:
返回“here”,难以置信!
即我必须将函数 callJSONMethod() 添加到使用 bigobj 的任何功能块..... 也许可以接受。
最好的问候
答案 8 :(得分:-2)
$("#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();
}
});
});