我需要创建类似以下JSON实体的东西:
{
"foo": function() { *some code* }
}
任何常见的JSON库(json,jsonb,aeron等)都能轻松实现吗? 在编码时,我没有找到告诉库不引用功能部分的方法。
谢谢,
P.S。我理解不允许这种用法的原因是强制执行正确的语法,但我愿意冒这个风险。
答案 0 :(得分:9)
这不是JSON实体,而是JavaScript对象。 JSON没有功能概念。
使用JSON编码函数的唯一方法是将其编码为字符串:
{ "foo": "function() { return \"Hello, World\" }" }
如果要在JavaScript中执行该功能,则必须eval
字符串:
var jsonObj = JSON.parse('{ "foo": "function() {return \\"Hello, World\\";}" }');
var jfoo = eval('(' + jsonObj.foo + ')');
alert(jfoo()); // Shows a dialog box "Hello, World"
请注意,这允许JSON的源在您的网站或应用程序的上下文中执行任意JavaScript。因此,您应尽可能传输数据而不是函数,并确保不要从不受信任的来源eval
代码。