Разбор данных JSON с использованием jquery? - PullRequest
0 голосов
/ 04 января 2011

У меня проблема с анализом данных json из hello.json в текущий html-файл.

как мне получить данные об инвесторах, событиях и цене из hello.json в трех отдельных массивах,

http://compliantbox.com/mobile/optionsedge/hi.html

, пожалуйста, помогите мне !!!

вот мой HTML-код:

    <html>
    <head>
      <script src="http://code.jquery.com/jquery-1.4.4.js"></script>
    </head>
    <body>
    <script>

    $.getJSON("http://compliantbox.com/mobile/optionsedge/hello.json?jsoncallback=?",
      {},
      function(data) { alert(data);  $.each(data.items, function(i,item){ alert(); });
      });
    </script>
    </body>
    </html>

и вот мой код JSON:

{ "data": 

{ 

"current_condition":[{

        "investors": [{"active"},{"agressive"},{"conservative"},{"day trader"},{"very active"}], 

        "events": [{"3 months"},{"weekly"},{"monthly"},{"leaps"},{"heaps"}], 

        "price": [{"4"},{"3"},{"9"},{"5"},{"2"}]

    } ] }}

Ответы [ 3 ]

6 голосов
/ 04 января 2011

Обновление 3 : Я только что посмотрел вашу связанную страницу ( всегда скопируйте соответствующий код в сам вопрос), и вот ваша проблема:

$.each(data.items, function(i,item){
  $("<html/>").attr("src", item.event);
  if ( i == 3 ) return true;
});

В результирующем объекте нет data.items десериализации (теперь действующего) JSON, на который вы указываете. Там нет items вообще. Ваш JSON описывает объект с одним свойством data, которое, в свою очередь, имеет свойство current_conditions, которое представляет собой массив с одной записью, объект со свойствами investors, events и price. См. Мой код из Обновления 2 о том, как с ним взаимодействовать.

Обновление 2 : Если вы измените свой JSON, чтобы сделать его действительным, jQuery будет работать. Я имею в виду, тысячи сайтов используют это каждый день ... Живой пример с вашими данными, массирующими, чтобы сделать их действительными.

Обновление : Теперь, когда вы опубликовали свой JSON, мы видим, что он недействителен. Проверьте сайт JSON и инструмент JSONlint . Ваши массивы investors, events и price содержат записи в форме {"active"}, которая является недопустимой записью объекта.


Оригинальный ответ :

Если вы используете функцию jQuery ajax (или getJSON или одну из ее других оболочек), она должна быть проанализирована по времени ее просмотра. Если вам когда-нибудь придется анализировать строку JSON самостоятельно, используйте parseJSON. Подробности:

ajax и его обертки

Расширение на вещь ajax: если вы возвращаете строку и ожидаете объект (например, результат анализа JSON), убедитесь, что сервер возвращает правильный тип содержимого ("application / json") «). Если вы не можете управлять сервером и отправляет неправильный тип контента, вы можете переопределить сервер, задав опцию ajax a dataType.

Если это не работает, вы можете проверить - действительно ли JSON действителен JSON ? Потому что там много не совсем JSON. Например, это допустимый JSON:

{
    "foo": 1,
    "bar": "x"
}

Это , а не :

{
    foo: 1,
    bar: 'x'
}

Строгий парсер может отклонить последний, потому что он недействителен (несколькими способами).

Пример - нормальная версия сервера настроена правильно:

$.ajax({
   url: "yoururl",
   success: function(data) {
       // Here, `data` is already an object if the response was
       // JSON and the server gave the correct content-type
   }
});

Пример - Форсирование типа данных:

$.ajax({
   url: "yoururl",
   dataType: "json",           // <== The new bit
   success: function(data) {
       // Here, `data` is already an object if the response was
       // parseable JSON
   }
});

или

$.getJSON("yoururl", function(data) {
   // Here, `data` is already an object if the response was
   // parseable JSON
});

Разбор вашей собственной строки:

var str = '{"foo": 1, "bar": "x"}'; // A JSON string
var obj = jQuery.parseJSON(str);    // The resulting object
1 голос
/ 04 января 2011

Ваш JSON недействителен.

http://compliantbox.com/mobile/optionsedge/hello.json?jsoncallback=?

http://www.jsonlint.com/

Именно поэтому синтаксический анализ не работает.

As @Skilldrickкак указано в комментариях к Вопросу, вы должны проверять консоль, когда вы выполняете AJAX, и она не работает;при этом было бы обнаружено исключение синтаксической ошибки.

0 голосов
/ 04 января 2011

На основании понравившейся вам страницы и файла JSON, который она затем вызывает, я бы сказал, что это даст вам то, что вам нужно:

function(data) {
    var lists = data['data']['current_condition'][0];

    var investors = lists['investors'],
        events = lists['events'],
        price = lists['price'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...