2015-11-02 144 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。 –