Законный JSON, дающий ошибку в IE: ожидаемый идентификатор, строка или номер - PullRequest
0 голосов
/ 11 марта 2011

У меня странная ошибка IE, и все, что я могу найти в Google, это то, что ошибка должна появиться, когда у вас есть запятая в словаре или массиве.Но так как мой JSON, по словам JSONLint, совершенно легален, я очень расстроен ... JSON указан здесь.Мой вопросКто-нибудь сталкивался с этой ошибкой, когда она не была связана с ","?Любая помощь или руководство будут высоко оценены.

Кстати, ошибка появляется в любом JSON-декодере, который я пробовал, но я хочу использовать mootools JSON.decode

{
    "spine": [
        "title.xml",
        "about.xml",
        "main0.xml",
        "main1.xml",
        "main2.xml",
        "main3.xml",
        "main4.xml",
        "main5.xml",
        "main6.xml",
        "main7.xml",
        "main8.xml",
        "main9.xml",
        "main10.xml",
        "main11.xml",
        "similar.xml",
        "feedbooks.xml"
    ],
    "chapters": {
        "main9.xml": "TEST",
        "similar.xml": "TEST",
        "title.xml": "TEST",
        "main10.xml": "TEST",
        "feedbooks.xml": "TEST",
        "about.xml": "TEST",
        "main0.xml": "TEST",
        "main5.xml": "TEST",
        "main4.xml": "TEST",
        "main8.xml": "TEST",
        "main6.xml": "TEST",
        "main11.xml": "TEST",
        "main3.xml": "TEST",
        "main1.xml": "TEST",
        "main7.xml": "TEST",
        "main2.xml": "TEST"
    },
    "manifest": {
        "ncx": {
            "href": "fb.ncx",
            "media-type": "application/x-dtbncx+xml"
        },
        "titlepage": {
            "href": "title.xml",
            "media-type": "application/xhtml+xml"
        },
        "logo-feedbooks": {
            "href": "images/logo-feedbooks.png",
            "media-type": "image/png"
        },
        "logo-feedbooks-tiny": {
            "href": "images/logo-feedbooks-tiny.png",
            "media-type": "image/png"
        },
        "about-css": {
            "href": "css/about.css",
            "media-type": "text/css"
        },
        "feedbooks": {
            "href": "feedbooks.xml",
            "media-type": "application/xhtml+xml"
        },
        "main8": {
            "href": "main8.xml",
            "media-type": "application/xhtml+xml"
        },
        "main9": {
            "href": "main9.xml",
            "media-type": "application/xhtml+xml"
        },
        "main0": {
            "href": "main0.xml",
            "media-type": "application/xhtml+xml"
        },
        "main1": {
            "href": "main1.xml",
            "media-type": "application/xhtml+xml"
        },
        "main2": {
            "href": "main2.xml",
            "media-type": "application/xhtml+xml"
        },
        "main3": {
            "href": "main3.xml",
            "media-type": "application/xhtml+xml"
        },
        "main4": {
            "href": "main4.xml",
            "media-type": "application/xhtml+xml"
        },
        "main5": {
            "href": "main5.xml",
            "media-type": "application/xhtml+xml"
        },
        "main6": {
            "href": "main6.xml",
            "media-type": "application/xhtml+xml"
        },
        "main7": {
            "href": "main7.xml",
            "media-type": "application/xhtml+xml"
        },
        "main10": {
            "href": "main10.xml",
            "media-type": "application/xhtml+xml"
        },
        "main11": {
            "href": "main11.xml",
            "media-type": "application/xhtml+xml"
        },
        "newspaper-css": {
            "href": "css/newspaper.css",
            "media-type": "text/css"
        },
        "page-css": {
            "href": "css/page.css",
            "media-type": "text/css"
        },
        "about": {
            "href": "about.xml",
            "media-type": "application/xhtml+xml"
        },
        "main-css": {
            "href": "css/main.css",
            "media-type": "text/css"
        },
        "titlepage-css": {
            "href": "css/title.css",
            "media-type": "text/css"
        },
        "feedbooks-css": {
            "href": "css/feedbooks.css",
            "media-type": "text/css"
        },
        "similar": {
            "href": "similar.xml",
            "media-type": "application/xhtml+xml"
        }
    },
    "spinereal": [
        "title.xml",
        "about.xml",
        "main0.xml",
        "main1.xml",
        "main2.xml",
        "main3.xml",
        "main4.xml",
        "main5.xml",
        "main6.xml",
        "main7.xml",
        "main8.xml",
        "main9.xml",
        "main10.xml",
        "main11.xml",
        "similar.xml",
        "feedbooks.xml"
    ],
    "contents": [
        {
            "src": "title.xml",
            "id": "level1-titlepage",
            "title": "Title"
        },
        {
            "src": "about.xml",
            "id": "level1-about",
            "title": "About"
        },
        {
            "src": "main0.xml",
            "id": "chap578",
            "title": "Chapter 1"
        },
        {
            "src": "main1.xml",
            "id": "chap580",
            "title": "Chapter 2"
        },
        {
            "src": "main2.xml",
            "id": "chap582",
            "title": "Chapter 3"
        },
        {
            "src": "main3.xml",
            "id": "chap584",
            "title": "Chapter 4"
        },
        {
            "src": "main4.xml",
            "id": "chap586",
            "title": "Chapter 5"
        },
        {
            "src": "main5.xml",
            "id": "chap588",
            "title": "Chapter 6"
        },
        {
            "src": "main6.xml",
            "id": "chap590",
            "title": "Chapter 7"
        },
        {
            "src": "main7.xml",
            "id": "chap592",
            "title": "Chapter 8"
        },
        {
            "src": "main8.xml",
            "id": "chap594",
            "title": "Chapter 9"
        },
        {
            "src": "main9.xml",
            "id": "chap596",
            "title": "Chapter 10"
        },
        {
            "src": "main10.xml",
            "id": "chap598",
            "title": "Chapter 11"
        },
        {
            "src": "main11.xml",
            "id": "chap600",
            "title": "Chapter 12"
        },
        {
            "src": "similar.xml",
            "id": "level1-similar",
            "title": "Recommendations"
        }
    ],
    "metadata": {
        "publisher": "TEST",
        "rights": "TEST",
        "description": "TEST",
        "language": "TEST",
        "creator": "TEST",
        "title": "TEST",
        "source": "TEST",
        "coverage": "",
        "date": "TEST",
        "identifier": "TEST",
        "subject": "TEST"
    }
}

ОБНОВЛЕНИЕ

Хорошо, ребята ... Я вроде решил свою проблему ... То, как я получил json, было от Джанго, я предположил, что могу просто взять simplejson.dumpмоего словаря, а затем использовать его в шаблоне, подобном следующему:

var opf = {{ var }}

Это прекрасно работало в браузерах webkit и mozilla, однако IE задохнулся от этого с загадочной ошибкой в ​​той же строке.Итак ... То, что я пробовал, было

var opf = JSON.decode({{var}});

и

var opf = JSON.decode("{{var}}");

, которые генерировали точно такую ​​же ошибку, но теперь ошибка произошла где-то в mootools.Я перепробовал все ..: / так что я в итоге сделал, вместо этого сделать Request.JSON, чтобы я не передавал переменную в шаблон.Теперь IE неожиданно играет хорошо: / Я чувствую, что это немного взломать, но какого черта.Спасибо за быстрые ответы, ребята ..

1 Ответ

3 голосов
/ 11 марта 2011

Обновленный ответ :

Я думаю, что это должна быть ошибка в другом месте на странице.Димитар указал ниже, что вы отметили свой вопрос mootools и, вероятно, используете JSON.decode, но это прекрасно работает:

var obj, json;
json = '...your JSON...';
obj = JSON.decode(json);

Живой пример

Альтернативно : Если то, что вы цитировали, появляется буквально в вашем коде JavaScript (не заключено в строку, не загружается с сервера через XHR или что-то еще), то то, что вы цитировалиявляется литералом объекта JavaScript, а не JSON, и вы его вообще не анализируете.Упрощенный пример:

литерал объекта JavaScript:

var obj = {
    foo: "bar"
};

Кавычки вокруг имен свойств являются необязательными в литерале объекта (не так в JSON, где они требуются), так что это нормальнотоже:

var obj = {
    "foo": "bar"
};

JSON:

var json = '{' +
           '   "foo": "bar"' +
           '}';
var obj = JSON.decode(json);

Оригинальный ответ : (пропустив тег mootools)

Он отлично работает с json2.js, даже в IE6:

var obj, json;
json = '...your JSON...';
obj = JSON.parse(json); // where `json` is a string containing your JSON

Живой пример

Звучит как проблема с анализомили, возможно, проблема в другом месте в коде.

Если вы используете raw eval, убедитесь, что вы заключили JSON в скобки:

var obj, json;
json = '...your JSON...';
obj = eval('(' + json + ')');

Живой пример

... но я бы не рекомендовал использовать eval для анализа JSON (даже не json2, который использует eval под обложками), если вы не уверены висточник (например, ваш собственный сервер).Я бы, вероятно, использовал один из не eval парсеров из страницы github Крокфорда .

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