2010-06-22 33 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