代码之家  ›  专栏  ›  技术社区  ›  Vicky

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

  •  4
  • Vicky  · 技术社区  · 14 年前

    在JavaScript EVAL函数中,我面临以下JSON响应对象的问题; 因为特殊的性格 谭氏 T·K·K

    {[{"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

    3 回复  |  直到 14 年前
        1
  •  3
  •   ChaosPandion    14 年前

    啊,我知道问题出在哪里。需要将对象表达式括在括号中, eval 正确工作。

    alert(eval("({\"userFirstNm\":\"Tamás\",\"userAsscId\":\"37732\",\"userLastNm\":\"Török\",\"userLanId\":\"a37732\"})"));
    
        2
  •  0
  •   user181548    14 年前

    这不是一个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";
    

    生产

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

    将字符串放入变量,然后将其放入var

    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