2015-01-22 4 views
4

мне нужно разобрать длинную строку в JSON-объект с помощью кода ниже:Почему я не могу разобрать эту строку json в javascript?

<script type="text/javascript"> 
function getTestData() 
{ 
    //I have validate this json string using several tools, it's a valid json string. 
    var jsonStr = '{"has_more":true,"next_offset":3,"results":[{"test_id":"3EA70EB9-12C3-466E-5E18-95057A630980","printid":null,"url":"http:\/\/muteor.testdomain.com\/art\/Smile-450664562","title":"Challenge 578","category":"Scraps","category_path":"scraps","is_favourited":false,"is_deleted":false,"author":{"userid":"98B7A0CE-006D-281A-CBB5-B08989184B19","username":"muteor","usericon":"http:\/\/a.testdomain.net\/avatars\/m\/u\/muteor.png?2","type":"admin"},"stats":{"comments":0,"favourites":0},"published_time":1398687231,"allows_comments":true,"excerpt":"<p>From the mists of chaos comes the legend of the frog wizard.<\/p><p>Today,\n   the DeviantArt community explores the mystery of the frog wizard. What does the frog wizard look like? <strong>Show us!<\/strong><\/p>","is_mature":true,"is_downloadable":true,"content":{"src":"http:\/\/fc09.testdomain.net\/fs70\/f\/2014\/118\/8\/2\/smile_by_muteor-d7gbb02.jpg","height":768,"width":1024,"transparency":false,"filesize":82184},"thumbs":[{"src":"http:\/\/th09.testdomain.net\/fs70\/150\/f\/2014\/118\/8\/2\/smile_by_muteor-d7gbb02.jpg","height":113,"width":150,"transparency":false},{"src":"http:\/\/th01.testdomain.net\/fs70\/200H\/f\/2014\/118\/8\/2\/smile_by_muteor-d7gbb02.jpg","height":200,"width":267,"transparency":false},{"src":"http:\/\/th06.testdomain.net\/fs70\/300W\/f\/2014\/118\/8\/2\/smile_by_muteor-d7gbb02.jpg","height":225,"width":300,"transparency":false}]},{"test_id":"3EA70EB9-12C3-466E-5E18-95057A630980","printid":null,"url":"http:\/\/muteor.testdomain.com\/art\/Test2-450661202","title":"Challenge 574","category":"Scraps","category_path":"scraps","is_favourited":false,"is_deleted":false,"author":{"userid":"98B7A0CE-006D-281A-CBB5-B08989184B19","username":"muteor","usericon":"http:\/\/a.testdomain.net\/avatars\/m\/u\/muteor.png?2","type":"admin"},"stats":{"comments":0,"favourites":0},"published_time":1398685034,"allows_comments":true,"excerpt":"<p>From the mists of chaos comes the legend of the frog wizard.<\/p><p>Today,\n   the DeviantArt community explores the mystery of the frog wizard. What does the frog wizard look like? <strong>Show us!<\/strong><\/p>","is_mature":false,"is_downloadable":true,"content":{"src":"http:\/\/fc02.testdomain.net\/fs71\/f\/2014\/118\/a\/4\/test2_by_muteor-d7gb8eq.jpg","height":768,"width":1024,"transparency":false,"filesize":68953},"thumbs":[{"src":"http:\/\/th03.testdomain.net\/fs71\/150\/f\/2014\/118\/a\/4\/test2_by_muteor-d7gb8eq.jpg","height":113,"width":150,"transparency":false},{"src":"http:\/\/th03.testdomain.net\/fs71\/200H\/f\/2014\/118\/a\/4\/test2_by_muteor-d7gb8eq.jpg","height":200,"width":267,"transparency":false},{"src":"http:\/\/th00.testdomain.net\/fs71\/300W\/f\/2014\/118\/a\/4\/test2_by_muteor-d7gb8eq.jpg","height":225,"width":300,"transparency":false}]},{"test_id":"346E0322-0ED1-6A89-DCFF-C128FCB8D394","printid":null,"url":"http:\/\/muteor.testdomain.com\/art\/Test-450664268","title":"Challenge 424","category":"Scraps","category_path":"scraps","is_favourited":false,"is_deleted":false,"author":{"userid":"98B7A0CE-006D-281A-CBB5-B08989184B19","username":"muteor","usericon":"http:\/\/a.testdomain.net\/avatars\/m\/u\/muteor.png?2","type":"admin"},"stats":{"comments":0,"favourites":0},"published_time":1398687047,"allows_comments":true,"excerpt":"<p>From the mists of chaos comes the legend of the frog wizard.<\/p><p>Today,\n   the DeviantArt community explores the mystery of the frog wizard. What does the frog wizard look like? <strong>Show us!<\/strong><\/p>","is_mature":false,"is_downloadable":true,"content":{"src":"http:\/\/fc03.testdomain.net\/fs70\/f\/2014\/118\/a\/b\/test_by_muteor-d7gbarw.jpg","height":768,"width":1024,"transparency":false,"filesize":164010},"thumbs":[{"src":"http:\/\/th03.testdomain.net\/fs70\/150\/f\/2014\/118\/a\/b\/test_by_muteor-d7gbarw.jpg","height":113,"width":150,"transparency":false},{"src":"http:\/\/th03.testdomain.net\/fs70\/200H\/f\/2014\/118\/a\/b\/test_by_muteor-d7gbarw.jpg","height":200,"width":267,"transparency":false},{"src":"http:\/\/th03.testdomain.net\/fs70\/300W\/f\/2014\/118\/a\/b\/test_by_muteor-d7gbarw.jpg","height":225,"width":300,"transparency":false}]}]}'; 
    var data = null; 
    try 
    { 
     data = JSON.parse(jsonStr); 
    } 
    catch (e) 
    { 
    } 
    return data; 
} 

Однако, после вызова функции JSON.parse(), я получил исключение:

SyntaxError: Unexpected token 
message: "Unexpected token ↵" 
stack: (...) 
get stack: function() { [native code] } 
set stack: function() { [native code] } 
__proto__: Error 

Кто может помочь мне разобраться, как разобрать это на javascript? Спасибо всем!

+1

Он работает для меня после удаления символов новой строки, которые у вас есть ('\ n'). – Marty

+0

Спасибо, Марти! Да, вы правы, есть ли способ сохранить \ n, где синтаксический анализ? –

+0

Почему у вас есть JSON внутри * строкового литерала * в первую очередь? Это довольно необычно. Если вы получите JSON из запроса или он сгенерирован, то описанная вами проблема не существует. В противном случае для создания объекта используйте литерал объекта. –

ответ

4

Вам нужно сбежать от новых символов. Вы ввели буквальные символы новой строки в свою строку.

Каждая из ваших escape-последовательностей \n должна быть \\n.

Обратите внимание, что ваша строка будет проходить проверку при копировании в валидатор, поскольку это парсер JavaScript, который превращает \n в символ символа новой строки. Эта проблема проявляется только тогда, когда ваша конкретная строка JSON сначала оценивается как строковый литерал JavaScript, а затем анализируется как JSON.

+0

У вас есть блог .. пожалуйста – Afsar

+0

@zan Нет, я не сожалею. – meagar

0

JSON не позволяет использовать «настоящие» символы новой строки в своих данных; он может только ускользнуть от новых строк. Итак, вы можете сделать это, включив дополнительную косую черту перед новой строкой («one \\ ntwo»).

+0

* «JSON не разрешает« настоящие »строки в своих данных;» * По крайней мере, не во внутренних строках, да. Однако избегать '\ n' в JSON не требуется. '[" foo \ nbar "]' является действительным JSON. –

+0

, но комментарий № 2 о выпуске V8 https://code.google.com/p/v8/issues/detail?id=616 ясно говорит, что: «Если вы хотели разобрать его как строку, содержащую escape-последовательность \ n newline , обратная косая черта должна быть экранирована в строковом литерале. " и комментарий # 6 и 7 также поддерживает это. – Paritosh

+0

Это говорит о JSON в строковом литерале JavaScript * *. В этом случае проблема заключается в строковых литералах. Это не относится к самому JSON. –