2012-07-13 72 views
0

例如我的JSON字符串是這樣的:JSON字符串函數調用

{ 
"v1" : [], 
"v2": 2, 
"v3": f() 
} 

現在,我需要解碼此爲ff()的定義範圍內給出正確的答案在這方面(通過檢查調試器)。但是JSON.parse(jsonstring)給我Unexpected tokeneval也給出錯誤。我該怎麼辦?

看到一個例子Here

+1

這不是一個JSON字符串:「F()」 。閱讀http://www.json.org/ – 2012-07-13 13:54:31

回答

2

爲什麼它不工作

看一個JSON的definition,它不能包含函數調用。

可能的解決方法

一種方法是做這樣的事情,回報你要調用的函數的字符串。

{ 
    "v1" : [], 
    "v2": 2, 
    "v3": "f" 
} 

現在當您需要訪問它時,您可以調用該函數。

var myJSON = JSON.parse(jsonstring); 
var myFunctionResult = window[myJSON.v3](); //works if global variable 

其他選項是改變你的代碼是如何工作的,讓一個異步腳本調用[jQuery的是getScript,常規的JavaScript createElement("script")appendChild()和使用回調像JSONP一樣。

+0

好吧,但我想你明白我想要的結果。請作出相應迴應。 – prongs 2012-07-13 13:56:55

+0

使用可能的解決方案對其進行了更新[s]。 – epascarello 2012-07-13 14:14:46

0

JSON字符串不能包含函數。

JSON與JavaScript對象不同,即使前者是從後者派生的。最終,它是一個字符串。

+0

好的,但我想你明白我想要的結果。請作出相應迴應。 – prongs 2012-07-13 13:56:15

+0

我真的認爲,聽聽這個頁面上我們所有人都在說什麼 - 甚至試圖在你的JSON中強制使用函數(如果你實現了它,必須從字符串中進行評估,因爲JSON不能包含函數)是一個壞主意。它暗示了應用程序設計中的一個缺陷,需要加以解決。中途之家可能會在您的JSON中提及函數*名稱*,而不是函數本身。 – Utkanos 2012-07-13 14:04:32

0

你不應該在JSON中使用任何回調或函數調用(它不是有效的JSON,它是不安全的,它是荒謬的 - 如果你以某種方式使它工作,最後兩件事情),總有辦法在腳本中執行它。

編輯:你真的不需要從JSON調用函數 - 請返回到「畫板」和設計的應用程序不使用這種模式

+0

好,但我想你明白我想要的結果。請作出相應迴應。 – prongs 2012-07-13 13:56:39

+0

是的,我看到你在應用程序設計中存在缺陷,在JSON中通過函數調用「修復」 – SergeS 2012-07-13 14:01:25