Ошибка парсера JSON - PullRequest
       2

Ошибка парсера JSON

1 голос
/ 27 февраля 2011

Я получаю ошибку синтаксического анализатора 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"}]

Может кто-нибудь определить, что это за ошибка?Первоначально я использовал «Aerospace & Defense» и думал, что проблема в особом персонаже.Но это не похоже на это.

Я использую ASP.NET MVC JSONResult, чтобы передать это обратно в jQuery.FireFox и IE показывают, что данные создаются правильно, но анализатор jquery выдает ошибку.Я слышал, что синтаксический анализатор был значительно изменен в новом jQuery.

Любая помощь будет высоко оценена.

Ответы [ 7 ]

3 голосов
/ 27 февраля 2011

Выглядит нормально для меня. См. ДЕМО .

Еще одна демонстрация, использующая эту строку JSON в ответе на фактический запрос jQuery AJAX в:

Я не могу понять, как парсер jQuery JSON может быть существенно изменен. Это фактический источник jQuery.parseJSON в jQuery 1.5.1:

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 );
    }
},

Существует только одно место, которое потенциально может вызвать некоторые проблемы: регулярное выражение JSON :

// 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,

но это было последнее изменение в сентябре 2010 года, Джон Резиг.

Какую версию вы используете?

2 голосов
/ 27 февраля 2011

http://www.jsonlint.com/ говорит, что это действительно.

Может ли быть ошибка jquery?

1 голос
/ 13 мая 2011

Какую версию jQuery вы используете?У меня были точные те же проблемы с использованием шаблона ASP.NET MVC по умолчанию в VS 2010, который включал локальную копию jQuery 1.5.1.

Несмотря на то, что мой возвращенный JSON выглядел хорошо и проверен, я продолжал получать 'parserrror' из функции jQuery $ ajax.В конце концов, в отчаянии я перешел на jQuery 1.6, и он работал нормально.Так что я подозреваю ошибку в 1.5.1.

0 голосов
/ 21 марта 2013

Одна из причин, по которой я получил эту ошибку, заключалась в том, что я сохранял \ n (т. Е. «Это моя заметка. \ N Она вам кое-что говорит») в моей базе данных ... Я получил это из ввода textarea. Когда я попытался отправить обратно строку json с этим escape-символом, он выдал эту ошибку.

0 голосов
/ 14 августа 2011

Заключение объекта в волнистые скобки решило эту проблему для меня. Нет [] и нет "".

0 голосов
/ 27 февраля 2011

Спасибо за ваши удивительные ответы. Вот что я узнал после дальнейших исследований. Я использую jquery1.5 и оказалось, что произошло что-то очень интересное. У меня был отдельный пост на jsTree, потому что я изначально думал, что JSTree выдает мне ошибку, но оказалось, что это определенно не jsTree, но может быть связано с jQuery.

Из-за сроков сдачи этого проекта мне не удалось изучить всю проблему, но я определенно нашел обходной путь. Надеюсь, это поможет:

jsTree JSON с MVC

0 голосов
/ 27 февраля 2011

возможно, вам нужны одинарные кавычки в начале и конце json, это должна быть строка, так как вы ее анализируете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...