I have a strange IE error, and all i can find on google is that the error should come when you have a trailing comma in a dictionary or an array. But since my JSON is perfectly leagal according to JSONLint, i am getting really frustrated.. The JSON is listed here. My question is. Did anyone experience this error where it wasn’t “,”-related ? Any help or guidance would be greatly apreciated..
By the way the error shows up in any JSON decoder i have tried, but the one i want to use is 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"
}
}
UPDATE
Ok guys.. i’ve kind of solved my problem.. The way i was getting the json was from Django, i assumed i could simple take the simplejson.dump of my dictionary and then use it in a template like this:
var opf = {{ var }}
This worked perfectly fine in webkit and mozilla browsers, however IE choked on it with the mysterious error on that exact line. So.. What i tried was
var opf = JSON.decode({{var}});
and
var opf = JSON.decode("{{var}}");
which generated the exact same error but now the error happened somewhere in mootools. I tried everything.. :/ so what i ended up doing, was to make a Request.JSON instead so that i dont pass the variable to the template. Now IE suddently play nicely :/ i feel it is a bit of a hack, but what the heck. Thanks for the quick replies guys..
Updated answer:
I think it must be an error elsewhere on the page. Dimitar pointed out below that you tagged your question
mootoolsand so are probably usingJSON.decode, but that works fine:Live example
Alternately: If what you’ve quoted appears literally in your JavaScript code (not enclosed in a string, not being loaded from the server via XHR or something), then what you’ve quoted is a JavaScript object literal, not JSON, and you don’t parse it at all. Simplified example:
JavaScript object literal:
Quotes around the property names are optional in an object literal (not so in JSON, where they’re required), so this is fine too:
JSON:
Original answer: (having missed the
mootoolstag)It works fine with json2.js, even back on IE6:
Live example
Sounds like a problem with how it’s being parsed, or perhaps a problem elsewhere in the code.
If you’re using raw
eval, be sure you wrap the JSON in parentheses:Live example
…but I wouldn’t recommend using
evalto parse JSON (not even json2, which usesevalunder the covers) unless you’re sure of the source (e.g., your own server). I’d probably use one of the non-evalparsers from Crockford’s github page.