JSON分析器错误

时间:2011-02-27 02:15:48

标签: jquery json

我继续为以下数据获取JSON解析器错误:

[{"data":"Aerospace and Defense"},{"data":"Agriculture"},{"data":"Business Services"},{"data":"Chemicals"},{"data":"Construction"},{"data":"Consumer Goods and Services"},{"data":"Education"},{"data":"Electronics"},{"data":"Energy and Utilities"},{"data":"Environmental Services and Equipment"},{"data":"Financial Services"},{"data":"Food and Beverage"},{"data":"Healthcare Goods and Services"},{"data":"Industrial Goods and Services"},{"data":"Information Technology"},{"data":"Metals and Mining"},{"data":"Security Products and Services"},{"data":"Software"},{"data":"Telecom"},{"data":"Tranportation and Storage"}]

任何人都可以确定错误是什么吗?我最初使用的是“航空航天与国防”,并认为特殊角色可能是问题所在。但它看起来不像。

我使用ASP.NET MVC JSONResult将其传递回jQuery。 FireFox和IE显示正确创建的数据,但jquery解析器抛出错误。我听说解析器在新的jQuery中已经被显着修改了。

任何帮助都将受到高度赞赏。

7 个答案:

答案 0 :(得分:3)

对我来说还不错。请参阅DEMO

在对实际jQuery AJAX请求的响应中使用此JSON字符串的另一个演示:

我无法真正看到如何对jQuery JSON解析器进行重大修改。 这是jQuery 1.5.1中的actual source of jQuery.parseJSON

parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }

    // Make sure leading/trailing whitespace is removed (IE can't handle it)
    data = jQuery.trim( data );

    // Make sure the incoming data is actual JSON
    // Logic borrowed from http://json.org/json2.js
    if ( rvalidchars.test(data.replace(rvalidescape, "@")
        .replace(rvalidtokens, "]")
        .replace(rvalidbraces, "")) ) {

        // Try to use the native JSON parser first
        return window.JSON && window.JSON.parse ?
            window.JSON.parse( data ) :
            (new Function("return " + data))();

    } else {
        jQuery.error( "Invalid JSON: " + data );
    }
},

只有一个地方可能会导致一些问题,那就是the JSON regexp

// JSON RegExp
rvalidchars = /^[\],:{}\s]*$/,
rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,

但是John Resig在2010年9月是last modified

您使用的是什么版本?

答案 1 :(得分:2)

http://www.jsonlint.com/说这是有效的。

可能是一个jquery bug?

答案 2 :(得分:1)

您使用的是哪个版本的jQuery?我在VS 2010中使用默认的ASP.NET MVC模板时遇到了完全相同的问题,其中包括jQuery 1.5.1的本地副本。

即使我返回的JSON看起来很好并且经过验证,我仍然从jQuery $ ajax函数中获取'parserrror'。最终,在绝望中,我改为jQuery 1.6,它运行良好。所以我怀疑1.5.1中有一个错误。

答案 3 :(得分:0)

也许你需要在json的开头和结尾都有单引号,因为你要解析它所以它应该是字符串

答案 4 :(得分:0)

感谢您的惊人回复。这是我在进一步研究后发现的。 我正在使用jquery1.5,结果发现有一些非常有趣的事情发生了。我在jsTree上有一个单独的帖子,因为我最初认为是JSTree给了我一个错误,但事实证明这绝对不是jsTree但可能与jQuery相关。

由于该项目截止日期的性质,我无法研究整个问题,但我确实找到了解决方法。希望这会有所帮助:

jsTree JSON with MVC

答案 5 :(得分:0)

将对象封装在波浪形括号中为我解决了这个问题。没有[]而没有“”。

答案 6 :(得分:0)

我收到此错误的一个原因是因为我在我的数据库中保存\ n(即“这是我的笔记。\ n它告诉你一些东西”)...我从textarea输入中得到了这个。当我尝试使用该转义字符发回json字符串时,它抛出了这个错误。