JSON.parse具有内部函数

时间:2019-06-29 20:26:03

标签: javascript json

我有一个字符串,如果将其转换为OBJ,它将正常工作。

var obj = JSON.parse('{ "placeholder": "Hello...."} ');

然后我以这种方式$('textarea').tagEditor(obj);

将其放入tagEditor插件中

但是我还需要以这种方式评估内部是否有一个函数并且它可以工作。

var obj = JSON.parse('{ "placeholder": "Hello....", "onChange":"function(a,b,c)}{ }"} ');

我把它……。$('textarea').tagEditor(obj);

但是当我这样做的时候我得到了错误 未捕获的SyntaxError:JSON中位置38处的字符串意外

实际上,我想评估字符串形式的函数, 如您所见,当我将事件“ onchange”和函数放入对象时,必须对其进行评估才能使插件正常工作 有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您应该首先声明该函数,然后在该函数上调用toString(它将自动转义',这是当前语法中的问题):

function x(a, b, c){
  return '';
}
const stringified = JSON.stringify({
  placeholder: "Hello....",
  onChange: x.toString()
});

具体来说,由于函数属性值的字符串定界符使用',因此需要转义内部使用的'。 (转

"onChange":"function(a,b,c)}{ return ''; }"

进入

"onChange":"function(a,b,c)}{ return \'\'; }"

但是我不建议手动执行此操作,这会非常乏味且容易出错-toString()方法可能是更好的选择。

答案 1 :(得分:1)

语法无效:

var obj = JSON.parse('{ "placeholder": "Hello....", "onChange":"function(a,b,c)}{ return ''; }"} ');

您的JSON被正确地引用了,但是您抢占了函数声明中的单引号。因此,将其更改为转义引号:

编辑:要评估该功能,您必须像这样使用eval()。我不知道您对onChange处理程序的意图是什么,所以我对其进行了修改,使其可以正常工作:

var obj = JSON.parse('{ "placeholder": "Hello....", "onChange":"function handler(e){ console.log(e.target.value); }"} ');
console.log(obj);
eval(obj.onChange);
document.querySelector('input').onchange = handler;
<input>
<div></div>