在json对象中执行javascript代码?

在json对象中执行javascript代码?,javascript,json,eval,Javascript,Json,Eval,还有别的吗 比如: { key1 : "val1", key2: "val2", some_code: "document.getElementById("someid").innerHTML='test';" } 因此,一些代码将在没有任何用户干预的情况下执行?可以这样做,是的,例如通过这样做: { "functionName": function() { alert('Hello!'); }() } 但是,这将不再是有效的JSON。JSON不接受函数。这将不再是JSON。

还有别的吗

比如:

{ key1 : "val1", key2: "val2", some_code: "document.getElementById("someid").innerHTML='test';" }

因此,一些代码将在没有任何用户干预的情况下执行?

可以这样做,是的,例如通过这样做:

{
  "functionName": function() {
    alert('Hello!');
  }()
}

但是,这将不再是有效的JSON。JSON不接受函数。

这将不再是JSON。但您可以对解析后的JSON进行后期处理:

json.some_code = eval(json.some_code);
但是,这可能是危险的(脚本注入等)

因此,如果可以,请改为:

json = { key1 : "val1", key2: "val2", elem: "someid", html:"test" };
document.getElementById(json.elem).innerHTML=json.html;

首先,你需要避开双引号:

{ key1 : "val1", key2: "val2", some_code: "document.getElementById(\"someid\").innerHTML='test';" }
(或使用单引号。)

如果要将
some_code
字段作为脚本进行求值,只需将其传递给eval即可:

eval(obj.some_code);
当然,这是非常危险的,除非你能绝对控制某些代码的内容

首先,您的示例不是有效的JSON。试试看吧

其次,JSON是一种数据交换标准,当正确解析时,其中包含的任何代码文本都不会被执行

继续读下去


经验法则:不要使用JavaScript
eval
函数,而是使用Douglas Crockford等现成的解析器。

如下所示,是的,您可以。但是,最好避免。如果你向第三方提供这个,is应该会被阻止。嗯-有点难构建,并将该结构从后端服务器传递到客户端浏览器,嗯?好的,谢谢各位-我想我可能会坚持这个-json作为数据,不可能“自执行”json对象。