[英]How do I convert a JSON string to a function in javascript?
如何將javascript / jquery中的字符串轉換為函數?
我正在嘗試使用JSON參數列表來初始化函數。 但是,其中一個參數是一個函數,我將其存儲為字符串,當我嘗試使用eval()返回函數時出現錯誤。
例如,如果我的JSON是:
json = { "one": 700, "two": "function(e){alert(e);}" }
然后在我的代碼中:
parameters = eval(json);
$('myDiv').addThisFeature({
parameter_1: json.one,
parameter_2: eval(json.two) // <= generates error
})
示例: http : //jsfiddle.net/patrick_dw/vs83H/
var json = '{ "one": 700, "two": "function(e){alert(e);}" }';
var parameters = JSON.parse( json );
eval( 'var func = ' + parameters.two );
func( 'test' ); // alerts "test"
您需要在不支持它的瀏覽器中加載JSON庫。
或者做兩個單獨的逃避:
示例: http : //jsfiddle.net/patrick_dw/vs83H/1/
var json = '{ "one": 700, "two": "function(e){alert(e);}" }';
eval( 'var parameters = ' + json );
eval( 'var func = ' + parameters.two );
func( 'test' );
我假設你已經意識到了eval的危險性。
用這個:
parameters = eval('(' + json + ')');
$('#myDiv').addThisFeature({
parameter_1: parameters.one,
parameter_2: eval('(' + parameters.two + ')') // <= does not generate an error
});
在字符串的開頭和結尾添加括號可防止語法錯誤。
但請注意,您正在使用eval
解析JSON(在某些情況下存在安全風險,但我認為這是無關緊要的,因為您確實希望運行服務器發送的任意代碼)。 如果你有服務器端的靈活性(發送無效的JSON),你可以發送沒有引用的函數作為字符串, eval
應該能夠解析那個就好了。
尋找一種不使用eval
的方法,這是我能想到的最好的方法。 使用Function構造function
從string
創建function
。
var parsed = JSON.parse('{"one":"700", "two":"function(){return 0;}" }');
var func = new Function('return ' + parsed.two)(); // return parsed.two function
alert(typeof func); // function
alert(func()) // 0
看到這個問題 。 如前所述,JSON旨在保存數據。 要將一段數據視為一個函數,首先需要評估該字符串。
你正在評估一個匿名函數,當然不會被任何東西調用。 如果你真的想在json中運行代碼,那么文本需要alert(e)
。
然而,這聽起來不是一件非常明智的事情。 你最好編寫代碼來處理json對象的內容,而不是試圖運行嵌入在json中的代碼。
這兩種方式都不是特別好,但如果你可以擺脫函數(e)包裝位,那么你可以使用var myDynamicFunction = new Function("e", "alert(e);");
否則,您正在考慮使用eval()
。 Eval()
一般都是邪惡的。 如果這是你從$.getJSON
調用回來的JSON,你就會$.getJSON
安全問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.