2016-04-14 6 views
-1

Я пытаюсь получить результат json для поиска новостей с использованием Bing Search API. Я получаю json-результат. Поскольку я новичок во всем этом, я пытаюсь просто заставить JSON.parse() работать в Javascript. Теперь он не работает следующий код:Parsing json работает только частично

<!DOCTYPE html> 
<html> 
<body> 
<p id="demo"></p> 
<script> 
var json = '{"d":{"results":[{"__metadata":{"uri":"https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/News?Query=\u0027britain\u0027&$skip=0&$top=1","type":"NewsResult"},"ID":"361408f1-9315-432c-925c-c8f6343a14f2","Title":"Britain\u0027s royal couple visits villages around Kaziranga in Assam","Url":"http://timesofindia.indiatimes.com/india/Britains-royal-couple-visits-villages-around-Kaziranga-in-Assam/articleshow/51811196.cms","Source":"Times of India","Description":"KAZIRANGA: After a jeep safari inside the Kaziranga National Park, Duke and Duchess of Cambridge Prince William and Kate Middleton visited villages around the famed park, the Kaziranga Discovery Centre and Centre for Wildlife Rehabilitation and ...","Date":"2016-04-13T17:07:46Z"},{"__metadata":{"uri":"https://api.datamarket.azure.com/Data.ashx/Bing/Search/News?Query=\u0027\u0027&$skip=2&$top=1","type":"NewsResult"},"ID":"71cae5a9-88fd-416b-8027-08a6409cced6","Title":"Take IPL out of drought-hit Maharashtra after 30 April: Bombay HC to BCCI","Url":"http://www.firstpost.com/sports/drought-hits-ipl-bombay-hc-directs-bcci-to-move-matches-after-30-april-out-of-maharashtra-2727426.html","Source":"Firstpost","Description":"The Bombay High Court on Wednesday directed BCCI to shift all the Indian Premier League (IPL) matches after 30 April out of Maharashtra observing that the plight of drought victims cannot be ignored. \"It will be better if the IPL matches are held ...","Date":"2016-04-13T19:45:15Z"}]}}'; 
obj = JSON.parse(json); 
document.getElementById("demo").innerHTML = obj.d.results[0].Title; 
</script> 
</body> 
</html> 

Однако, он работает для этого кода:

<!DOCTYPE html> 
<html> 
<body> 
<p id="demo"></p> 
<script> 
var json = '{"d":{"results":[{"__metadata":{"uri":"https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/News?Query=\u0027britain\u0027&$skip=0&$top=1","type":"NewsResult"},"ID":"361408f1-9315-432c-925c-c8f6343a14f2","Title":"Britain\u0027s royal couple visits villages around Kaziranga in Assam","Url":"http://timesofindia.indiatimes.com/india/Britains-royal-couple-visits-villages-around-Kaziranga-in-Assam/articleshow/51811196.cms","Source":"Times of India","Description":"KAZIRANGA: After a jeep safari inside the Kaziranga National Park, Duke and Duchess of Cambridge Prince William and Kate Middleton visited villages around the famed park, the Kaziranga Discovery Centre and Centre for Wildlife Rehabilitation and ...","Date":"2016-04-13T17:07:46Z"}]}}'; 
obj = JSON.parse(json); 
document.getElementById("demo").innerHTML = obj.d.results[0].Title; 
</script> 
</body> 
</html> 

Разница между этими двумя кодами существует дополнительный элемент в массиве результатов ,

Что я имею ввиду, не работает, так как ничего не отображается. Я проверил оба json с помощью онлайн-проверки json. Оба действительны.

Если я помещаю другие дополнительные записи в массив результатов, он отлично работает. Это не работает, когда массив результатов содержит вторую запись. Если я удалю вторую запись и добавлю еще 10 записей, то она также будет работать. Кажется, что виновником является вторая запись. Но как, я не могу узнать.

Проблема не ограничивается этим. Другие результаты, полученные с помощью Bing Search API, дали аналогичные проблемы. В другом json-запросе пятая запись, похоже, была проблемой.

Кто-нибудь может сказать мне, что я делаю неправильно?

+1

Проверьте консоль для errors..Something как 'Нечаянная toke..' – Rayon

+0

оба jsons струны действует? какой редактор вы использовали для проверки? –

+0

Как можно предположить, без тестирования возможно, что включение строки JSON в ваши файлы JavaScript приведет к тому, что ее escape-последовательности unicode \ u1234 будут интерпретироваться JavaScript таким образом, чтобы каким-то образом получить значение, которое не может быть принято буквально анализатор JSON. Вряд ли, но, может быть. Мог бы проверить это, заменив все '\' внутри строки на '\\', чтобы они дошли до анализатора JSON в их первоначальной форме. –

ответ

1

Вы должны дважды избежать кавычки в Description поле второго результата, как, что:

"Description": "The Bombay High Court on Wednesday directed BCCI to shift all the Indian Premier League (IPL) matches after 30 April out of Maharashtra observing that the plight of drought victims cannot be ignored. \\"It will be better if the IPL matches are held ..." 
+0

+1 Неожиданный токен «I», побег, используемый в этом экземпляре, закрывает тег json и делает его недействительным во второй записи. Вот почему первая запись работает, когда вы удаляете вторую. – zerohero

+0

Да, это работает! Но как я могу обнаружить такие ошибки? – grindel

+0

Как указано в комментариях .. Используйте инструменты разработчика ... '.. Если вы _too_ sharp, вы можете разобрать, просто просмотрев код;) – Rayon