javascript - IE 中的合法 JSON 给出错误 : Expected identifier, 字符串或数字

标签 javascript json internet-explorer mootools

我有一个奇怪的 IE 错误,我在谷歌上能找到的只是当你在字典或数组中有尾随逗号时应该出现错误。但由于根据 JSONLint,我的 JSON 是完全合法的,所以我真的很沮丧。这里列出了 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的方式是从Django,我假设我可以简单地获取我的字典的simplejson.dump,然后在像这样的模板中使用它:

var opf = {{ var }}

这在 webkit 和 mozilla 浏览器中运行得非常好,但是 IE 因该行上的神秘错误而卡住了。所以..我尝试的是

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

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

它产生了完全相同的错误,但现在错误发生在mootools中的某个地方。我尝试了一切.. :/所以我最终做的是制作一个 Request.JSON ,这样我就不会将变量传递给模板。现在 IE 突然变得很好用了:/我觉得这有点像黑客,但那又怎么样。感谢大家的快速回复..

最佳答案

更新答案:

我认为这一定是页面上其他地方的错误。 Dimitar 在下面指出,您标记了您的问题 mootools,因此可能使用 JSON.decode,但效果很好:

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

Live example

或者:如果您所引用的内容按字面意义出现在 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

Live example

听起来像是解析方式的问题,或者代码中其他地方的问题。

如果您使用原始 eval,请确保将 JSON 括在括号中:

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

Live example

...但我不建议使用 eval 来解析 JSON(甚至不是 json2,它在幕后使用 eval),除非你确定来源(例如,您自己的服务器)。我可能会使用 Crockford's github page 中的非 eval 解析器之一.

关于javascript - IE 中的合法 JSON 给出错误 : Expected identifier, 字符串或数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5271982/

相关文章:

javascript - 如何添加:hover and click event to element same time?

javascript - Jquery 替换 br 标签

c# - View Model 的序列化和反序列化

json - 解析 Xamarin 表单中的 XML

JSON.stringify 在 IE 中不起作用

javascript - 帮助我验证 url 是否应该接受 .me 域

php - 将数据保存到SQL并根据json数组计数显示它们

html - 表格单元格内的 CSS 缩放和 div 对齐

html - Chrome 在 css 中重新调整图片大小。即没有。(关于ff的idk)

javascript - 使用Javascript D3库,如何替换矩形选择中的数据?