使用JavaScript eval函数无法解析JSON字符串

5

我在JavaScript eval函数中遇到了以下Json响应对象的问题;由于特殊字符TamásTörök,导致出现JavaScript错误,期望是}。

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

有没有解决这个问题的方法。

alt text alt text


你能展示一下出错的代码吗?我在我的Firebug控制台中尝试了这个代码,它表现得很好。 - Lauri Lehtinen
我无法想象这不会起作用。 - ChaosPandion
这应该不是问题,我认为... 你在使用jQuery解析它吗? - ACP
这不是有效的JSON。你可能不想要外面的大括号吗? - ChaosPandion
3个回答

3
啊,我知道问题出在哪了。你需要将对象表达式用括号包裹起来才能使 eval 正确地工作。
alert(eval("({\"userFirstNm\":\"Tamás\",\"userAsscId\":\"37732\",\"userLastNm\":\"Török\",\"userLanId\":\"a37732\"})"));

0

这本身不是一个JavaScript语句,所以你不能对其进行eval操作。

这个Perl程序可以在SpiderMonkey中运行JavaScript代码:

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 "$@\n";

这不会打印任何错误信息。

以下内容:

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

生成

错误:语法错误:第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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接