2010-06-22 35 views
4

我面臨着在JavaScript eval函數用下列JSON效應初探對象問題解析JSON字符串;獲取期望的Java腳本錯誤} 因爲特殊字符的陶Török無法使用Java腳本eval函數

{[{"userFirstNm":"Naresh","userAsscId":"70336","userLastNm":"Yashwantrao","userLanId":"a70336"},{"userFirstNm":"Tamás","userAsscId":"37732","userLastNm":"Török","userLanId":"a37732"}]} 

是否有解決此問題的解決方案。

alt text http://www.freeimagehosting.net/uploads/a1b09b95d1.png alt text http://www.freeimagehosting.net/uploads/d819fb2191.png

+0

你可以顯示給你錯誤的代碼嗎?我在我的Firebug控制檯中試過,它的表現很好。 – 2010-06-22 04:26:04

+0

我無法想象這不行。 – ChaosPandion 2010-06-22 04:26:31

+0

這應該不是一個問題,我認爲是這樣的...你使用jquery來解析它嗎? – 2010-06-22 04:27:59

回答

3

啊,我知道是什麼問題。您需要將對象表達式包裝爲eval才能正常工作。

alert(eval("({\"userFirstNm\":\"Tamás\",\"userAsscId\":\"37732\",\"userLastNm\":\"Török\",\"userLanId\":\"a37732\"})")); 
+0

我已經更新了我的實際json靜音以及錯誤圖像 – Vicky 2010-06-22 04:36:11

0

這不是一個JavaScript語句本身,所以你將無法評估它。

這個Perl程序運行的JavaScript SpiderMonkey的:

use warnings; 
use strict; 
use JavaScript::SpiderMonkey; 
my $stuff = '{"userFirstNm":"Tamás","userAsscId":"37732","userLastNm":"Török","userLanId":"a37732"}'; 

my $stuff2 = "var k = new Object ($stuff)"; 

my $js2 = JavaScript::SpiderMonkey->new(); 
$js2->init(); # Initialize Runtime/Context 
my $rc2 = $js2->eval($stuff2); 
print "[email protected]\n"; 

這並不顯示任何錯誤信息。

以下:

my $js = JavaScript::SpiderMonkey->new(); 
$js->init(); # Initialize Runtime/Context 
my $rc = $js->eval($stuff); 
print "[email protected]\n"; 

產生

 
Error: SyntaxError: invalid label at line 1: {"userFirstNm":"Tam��s","userAsscId":"37732","userLastNm":"T��r��k","userLanId":"a37732"} 
0

把字符串轉換成變量,然後把它變成一個變種

var str = '{"userFirstNm":"Tamás","userAsscId":"37732","userLastNm":"Török","userLanId":"a37732"}'; 
eval("var obj=" + str); 
console.debug ? console.debug(obj) : alert(obj); //outputs the object 

和更安全的替代方案是json_parse功能:http://www.json.org/json_parse.js;

var obj = json_parse('{"userFirstNm":"Tamás","userAsscId":"37732","userLastNm":"Török","userLanId":"a37732"}'); 
console.debug ? console.debug(obj) : alert(obj); //outputs the object