如何在编码JSON对象时避免引号

时间:2011-09-06 10:38:48

标签: json haskell

我需要创建类似以下JSON实体的东西:

{ "foo": function() { *some code* } }

任何常见的JSON库(json,jsonb,aeron等)都能轻松实现吗? 在编码时,我没有找到告诉库不引用功能部分的方法。

谢谢,

P.S。我理解不允许这种用法的原因是强制执行正确的语法,但我愿意冒这个风险。

1 个答案:

答案 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代码。