Как мне разобрать этот JSON? - PullRequest
       20

Как мне разобрать этот JSON?

1 голос
/ 05 декабря 2009

Я использую API книги, который возвращает следующее

var _OLBookInfo = {
    "ISBN:234234234234234": {
        "bib_key": "ISBN:234234234234234", 
        "preview": "noview", 
        "preview_url": "http://openlibrary.org/b/adsfasdfa", 
        "info_url": "http://openlibrary.org/b/adsfasdf", 
        "details": {
            "publishers": [
                "W. H. sdafasdfasdf"
            ]
     }
};

Как я могу разобрать это с помощью jQuery, используя параметр обратного вызова $.get()

В частности, как мне получить легкий доступ к деталям -> издатели

Обновление

     $.post("/Home/LookupBook", { query: lookuptxt.val() },
               function (data) {
                   alert(data); //returns proper json data
                   alert(data.details.publishers[0]); // get erro saying details.publishers[0] is null
    }, 
   "json");

Ответы [ 4 ]

2 голосов
/ 05 декабря 2009

Вам не нужно анализировать строку JSON в JS. Просто посмотрите метод $ .getJSON () jQuery.

http://docs.jquery.com/Ajax/jQuery.getJSON

Пример:

$.getJSON( url, data, function(response){
           alert(response['ISBN:234234234234234'].details.publishers[0]);
           } );

ОБНОВЛЕНО: Мой плохой -

Я только что увидел, что ваш вызов не только возвращает JSON, но и возвращает файл JS.

Что вы можете сделать, это eval() данные, возвращенные с $.get()

$.get( url, data, funcCallback);
function funcCallback(data, status){
  eval(data);
  alert(_OLBookInfo['ISBN:234234234234234'].details.publisher[0]);
}

Кстати, ваша строка JSON недопустима. У него одна недостающая фигурная скобка сзади.

Вы также можете попробовать $ .getScript ():

http://docs.jquery.com/Ajax/jQuery.getScript

1 голос
/ 05 декабря 2009

Не путайте JSON с JavaScript. В этом примере вы предоставляете оператор JavaScript, в частности оператор присваивания. _OLBookInfo получает в качестве значения этот большой хэш данных.

Краткий ответ: чтобы сделать ваш пример допустимым JSON, избавьтесь от части var _OLBookInfo = (и завершающей точки с запятой). JSON сам по себе является литералом объекта или литералом массива. Это выражение , а не выражение .

Так что проблема не в вашем JavaScript или jQuery, а в API. Любой используемый вами API вводит вас в заблуждение, если он сказал, что он возвращает JSON . Если это ваш собственный API, вы можете легко исправить его на допустимый JSON.

1 голос
/ 05 декабря 2009

Уххх, JSON не нужно анализировать в JavaScript. В этом и есть смысл возвращать данные в этом формате с сервера.

0 голосов
/ 05 декабря 2009

Использование jQuery.getJSON().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...