2013-08-26 28 views
-1

如何轉換包含JSON JS函數定義轉換JSON

{ 
    "a1": "5", 
    "b1": "10", 
    "c1": "function(param1,param2) { return param1 +param2}" 
} 

到包含這些功能的JavaScript對象(而不是與定義字符串):

{ 
    a1: 5, 
    b1: 10, 
    c1: function(param1,param2) { return param1 + param2} 
} 
+0

[How to parse JSON in JavaScript](http://stackoverflow.com/questions/4935632/how-to-parse-json-in-javascript) – zzzzBov

+0

''a1「'引號無關緊要,但是該字符串應該用'parseInt()'替換爲該值來獲得整數值,但JSON字符串實際上應該由'「a1」:5'來代替。邪惡的功能評估? –

+2

**不是重複的** **該人希望評估「c1」值。 – ThiefMaster

回答

0

使用JS功能JSON.parse

var myobj = JSON.parse("{\"a1\": \"5\", \"b1\": \"10\", \"c1\": \"function(param1,param2) { return param1 +param2}\" }"); 
0

兩步:解析JSON,促進功能的源代碼的函數:

var jsonObj = JSON.parse(jsonFromAjax); 
jsonObj.c1 = eval(jsonObj.c1); 
+0

喂,通過的eval()「函數(參數1,參數2){返回參數1 +參數2}」仍與報價:(,TXH – adoweb

+0

@adoweb:不,這不是 – Eric

2

您可以通過一個齊磊功能JSON.parse。這使您可以將自定義邏輯應用於分析的值。

在這個函數可以測試一個值是否與模式function(...) {開始:

var obj = JSON.parse(str, function(k, v) { 

    if (/^\s*function\s*\([^)]*\)\s*{/.test(v)) { 
     try { 
      // using the Function constructor to evaluate the function 
      // definition in global scope 
      return Function('return ' + v)(); 
     } 
     catch() { 
      return v; // maybe not a JS function definition after all 
     } 
    } 
    return v; 
}); 

DEMO

當然,你也可以只遍歷產生的對象和之後的應用相同的邏輯解析,但使用reviver函數更容易,如果你有嵌套的對象/數組。

請注意,這是一個非常簡單的測試,只適用於匿名函數。如果您已命名函數,則必須相應地調整表達式。但這是基本的想法。

+0

完美,非常感謝 – adoweb

-1

這是一個將包含函數的json字符串轉換回帶有有效函數聲明的json對象的示例。

VAR jsonstring = 「{\」 模式\ 「:{\」 標題\ 「:\」 用戶反饋\ 「\ 」描述\「:\ 」這樣\「,\ 」類型\「:\」 對象\「,」\「:\」\「\」:\「\」\ \「屬性\」:{},\「buttons \」:{\「submit \」:{\「title \」:\「It \」,\「click \」:\「function(){alert你好');}\」 }}} }}」;

var jsonData = JSON.parse(jsonstring);

function Iterate(data) 
{ 
     jQuery.each(data, function (index, value) { 
     if (typeof value == 'object') { 
      Iterate(value); 
     } 
     else { 
      if (value.indexOf("function()") > -1) 
       data[index] = eval("(" + value + ")"); 
     } 
    }); 

}; 

Iterate(jsonData); 

在這種情況下 jsonData.options.form.buttons.submit.click();