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