2014-01-20 2 views
0

У меня есть JSON (https://gist.github.com/tekknolagi/8526671), в котором я запрашиваю список моих сообщений в блоге.Parsing JSON возвращает cryptic error

Я получил некоторые напуганные ошибки в консоли: enter image description here

А также в JSONLint: enter image description here

Я не могу понять, что случилось. Мой код:

$(document).ready(function() { 
    $.ajax({ 
    url: '/posts.json', 
    type: "GET", 
    dataType: "text", 
    success: function(data) { 
//  data = data.replace(/(\r\n|\n|\r)/gm,""); 
     console.log(data); 
     var parsed = JSON.parse(data); 
     var parsed = data; 
     var names = [] 
     for (var post in parsed) names.push(post.title); 
     console.log(names); 
     $('#page_holder').pagify({ 
     pages: data, 
     default: null 
     }); 
    }, 
    fail: function (err) { 
     console.log(err); 
    } 
    }); 
}); 

И он всегда терпит неудачу при анализе. Это убивало меня целую неделю.

+0

@TravisJ кажется сбежавшим ... – Shomz

+0

Как вы получили такой «JSON»? Вы должны использовать библиотеку для сборки JSON. –

+0

@dystroy Я генерирую его с помощью Liquid, но их собственный фильтр 'json' или' jsonify' не работает ... по какой-то причине – tekknolagi

ответ

6

Линия, которая бросает ошибку имеет это внутри строки:

Type \"help\", \"copyright\", \"credits\" or \"license\" 

\& не является действительным последовательность выхода значений JSON строк:

http://json.org/string.gif


"Proof" :

["\&foo"] 

приводит к одной и той же ошибки


Поскольку я не знаю, как \ попал туда в первую очередь, это не представляется возможным, чтобы обеспечить решение. Но чтобы сделать JSON действительным, вы должны удалить их (или удвоить их, как указал Pointy (не каламбур)) (прежде чем вы создадите JSON). Надлежащая библиотека JSON должна позаботиться о том, чтобы правильно сбежать от \.

+0

У него также есть некоторые символы табов, и они также не допускаются. (* edit * возможно) – Pointy

+0

«\ &» можно сделать JSON-безопасным, удвоив \, правильно? – Pointy

+0

@Pointy: Да и на каких вкладках вы говорите? Если я просто удалю '' '' 'перед' & ', JSON будет действительным. –