2015-11-02 126 views
0

值我有一个JSON对象访问的功能,如JSON对象

"a1": 
{ 
"b1": "val1", 
"b2": "function() {return null}", 
"c1": "{}" 
} 

此功能需要传递运行反思-DB查询。此功能a1.b1需要传递

r.db(database).table(table).indexCreate(indexname, a1.b2, a1.c1) 

当我运行查询我得到错误信息:“预期类型的​​功能,但发现DATUM:\ n‘功能(){返回NULL;}’”,

请为此提出修复建议。

+0

如何添加另一行var returnNull = function(){return null};并将您的字符串更新为'returnNull' – g2000

+0

这有帮助吗? http://www.sitepoint.com/call-javascript-function-string-without-using-eval/ – Pikamander2

+0

使用Set或Map将有助于 – baao

回答

1

在一个音符,你通常不应该以JSON的形式发送函数,这是问题的根源。但是,忽略了现在,你可以做eval

r.db(database).table(table).indexCreate(indexname, eval('('+a1.b2+')'), {}); 

慎用eval虽然。有安全问题等。

对于从字符串评估函数的其他方法,我建议检查出this question

+0

由于JSON函数不在括号中,eval是否不会返回undefined? – Pikamander2

+1

@ Pikamander2,你是对的,修正了我的答案以反映这一点。 –

-2

您需要从引号中解开函数。该错误似乎是说它得到一个字符串(你传入)而不是一个函数。

尝试 "a1": { "b1": "val1", "b2": function() {return null} }

如果你不是在输入JSON的控制,那么你就需要使用eval al.b2并传递英寸

+0

但它不会是json。 –

+0

它需要真正成为JSON吗? – jeffheifetz

+0

取决于,该操作没有给我们足够的背景知道肯定。既然他*有json,安全的赌注就是肯定的,它必须是json。 –