Синтаксическая ошибка при разборе строки JSON - PullRequest
4 голосов
/ 27 октября 2011

У меня есть пример JSON с какой-то частью моей веб-страницы:

{"html": {"#data": "\n<h2>Data</h2>\n<div class="\&quot;manufacturer-image\&quot;">\n \n</div>\n
<form action="\&quot;/manage/update-manufacturer-data/3\&quot;" method="\&quot;post\&quot;">\n \n 
<div class="\&quot;field\&quot;">\n <div class="\&quot;label\&quot;">\n <label for="\&quot;id_name\&quot;">Nazwa</label>:\n 
</div>\n \n \n <div class="\&quot;error\&quot;">\n 
<input id="\&quot;id_name\&quot;" name="\&quot;name\&quot;" maxlength="50" type="\&quot;text\&quot;">\n 
<ul class="\&quot;errorlist\&quot;"><li>Pole wymagane</li></ul>\n </div>\n \n </div>\n\n 
<div class="\&quot;field\&quot;">\n <div class="\&quot;label\&quot;">\n <label for="\&quot;id_image\&quot;">Zdjecie</label>:\n 
</div>\n \n \n <div>\n <input name="\&quot;image\&quot;" id="\&quot;id_image\&quot;" type="\&quot;file\&quot;">\n 
</div>\n \n </div>\n\n <div class="\&quot;field\&quot;">\n <div class="\&quot;label\&quot;">\n 
<label for="\&quot;id_description\&quot;">Opis</label>:\n </div>\n \n \n <div>\n 
<textarea id="\&quot;id_description\&quot;" rows="10" cols="40" name="\&quot;description\&quot;"></textarea>\n </div>\n \n 
</div>\n \n <div class="\&quot;buttons\&quot;">\n <input class="\&quot;ajax-save-button" button\"="" type="\&quot;submit\&quot;">\n 
</div>\n</form>"}}

Эта строка возвращается с помощью вызова ajax, и jQuery 1.6.1 выдает ошибку:

SyntaxError: JSON.parse: expected ',' or '}' after property value in object

в следующей части кода:

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

    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        console.warn('data: ', data);
        var ret;
        try{
            ret = window.JSON.parse(data);
        } catch(e){
            ret = {};
            console.warn(e);
        }
        return ret;
        //return window.JSON.parse( data );
    }

Что мне здесь не хватает?


РЕДАКТИРОВАТЬ:

Я проанализировал черезпредыдущий json (который, кстати, был создан с помощью python's simplejson lib, так что мне интересно, как это может работать где угодно), а теперь jsonlint показывает, что у меня есть правильный JSON.Тем не менее проблема остается той же.Новая строка:

{"html": [{"#data": "\n<h2>Data</h2>\n<div class=&quot;manufacturer-image&quot;>\n    \n</div>\n<form action=&quot;/manage/update-manufacturer-data/4&quot; method=&quot;post&quot;>\n        \n    <div class=&quot;field&quot;>\n        <div class=&quot;label&quot;>\n            <label for=&quot;id_name&quot;>Nazwa</label>:\n        </div>\n        \n        \n            <div class=&quot;error&quot;>\n                <input id=&quot;id_name&quot; type=&quot;text&quot; name=&quot;name&quot; maxlength=&quot;50&quot; />\n                <ul class=&quot;errorlist&quot;><li>Pole wymagane</li></ul>\n            </div>\n        \n    </div>\n\n    <div class=&quot;field&quot;>\n        <div class=&quot;label&quot;>\n            <label for=&quot;id_image&quot;>Zdjecie</label>:\n        </div>\n        \n        \n            <div>\n                <input type=&quot;file&quot; name=&quot;image&quot; id=&quot;id_image&quot; />\n            </div>\n        \n    </div>\n\n    <div class=&quot;field&quot;>\n        <div class=&quot;label&quot;>\n            <label for=&quot;id_description&quot;>Opis</label>:\n        </div>\n        \n        \n            <div>\n                <textarea id=&quot;id_description&quot; rows=&quot;10&quot; cols=&quot;40&quot; name=&quot;description&quot;></textarea>\n            </div>\n        \n    </div>\n  \n    <div class=&quot;buttons&quot;>\n        <input type=&quot;submit&quot; class=&quot;ajax-save-button button&quot; />\n    </div>\n</form>"}]}

EDIT2: Хорошо, похоже, что JSOn, покидающий мой бэкэнд, является правильным, но тупой jQuery добавляет дополнительные кавычки вокруг каждого "" ", что довольно странно.

Ответы [ 5 ]

10 голосов
/ 13 декабря 2012
storejson= getJSonObject("@ViewBag.JsonData");

function getJSonObject(value) {
    return $.parseJSON(value.replace(/&quot;/ig, '"'));
}
8 голосов
/ 27 октября 2011

Данные не действительный JSON, так как \" в строках, кажется, был заменен на "\.

Свяжитесь с автором этого предположительно-JSON и уведомите его илией, что есть много из JSON библиотеки доступны для все языки и платформы .

3 голосов
/ 27 октября 2011

Я могу ошибаться, но я думаю, что это из-за данных JSON не работает.Синтаксический анализатор JSON, вероятно, блокирует двойные кавычки в HTML, содержащемся в строковой переменной JSON.Я думаю, что это будет работать, когда вы предварительно обрабатываете строку HTML перед выводом данных JSON, поэтому вы заменяете двойные кавычки на что-то другое.(и наоборот после анализа данных JSON)

Пример может прояснить немного:

вместо этого: {"html": { "#data": "<input name="somename" type="text"/>"} }

я бы попробовалиспользуйте это:

{"html": { "#data": "<input name=&quot;somename&quot; type=&quot;text&quot;/>"} }

Надеюсь, это поможет ...

2 голосов
/ 27 октября 2011

JSON = Нотация объекта Javascript, поэтому значение свойства "#data" является недопустимой строкой.

Вы можете подтвердить свой JSON здесь

0 голосов
/ 27 октября 2011

Я думаю, это, вероятно, тот факт, что вы используете одинаковые двойные кавычки в самом HTML-коде, поэтому JSON считает его значением свойства, попробуйте использовать одинарные кавычки для всего HTML

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