getjson jquery для разбора массива - PullRequest
3 голосов
/ 28 апреля 2010

Получил упрощенную работу с массивами, см. Ниже

Для анализа сложного массива см. здесь .


TLDR : Хотите получить каждый заголовок из массива и вставить его в div, не зная, что находится внутри div, используя Jquery - getJSON.

Редактировать : Данные поступают из программного обеспечения, которое каждые две секунды выводит строку JSON с новыми данными, поэтому мне нужно вытащить массив данных в «d», как в пример ниже. Поэтому я должен получить «Заголовок» и «034324324» и т. Д. Для каждого.

Edit2 Обновлен код, чтобы точно соответствовать моему ..

У меня есть массив JSON, скажем:

{
"Days":
["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
}

И я хочу разобрать его, как для каждого «заголовка», чтобы вставить его в div.

Попытка в соответствии с

function getdata() {
31 $.ajaxSetup ({ cache: false}); //<!-- Stops IE from caching data //-->
32 
33 $.getJSON(testurl, function(data) {
34 $.each(data.days, function(i,item){
35 $('#testfield').append('<p>' + item + '</p>');
36
37 });
38 }); 

безрезультатно.

Я использую Getjson в других местах, но в тех случаях, когда я знаю, какой запрос я делаю. например:

$('#name').html(data.Projectname);

Что все работает отлично, но в этом случае мне нужно вывести детали из массива, не зная, что находится внутри массива, я уверен, что есть кое-что простое, что я здесь упускаю или делаю неправильно ^^

JSON, с которым я сейчас работаю, выглядит так:

{"Projectname":"ertyofhj","Projectid":"aqwertyuqw","Projecttitle":"ertyofhj"}

Массив был просто способом вытащить данные, не зная, что находится внутри массива.

Я просто продолжаю добавлять больше. Отладка Firebug или отладчика IE (Aargh), он достигнет

33 $.getJSON(testurl, function(data) {

тогда

38 });

полностью пропущено

34 $.each(data.days, function(i,item){

- Запрос GET срабатывает нормально и возвращает правильную строку JSON. Но теперь он не будет заполнять $ .each, или даже если я специально запрашиваю определенную строку. В примечании выше Firebug также говорит мне, что он не отформатирован как JSON?

Изменена исходная строка JSON на что-то более простое. (Дни недели) по мере загрузки дней недели. Так что я куда-то добираюсь. Но мне нужно иметь возможность вызывать более сложный массив. Например, (используя дни) у каждого дня есть определенное время, которое мне нужно отображать, а также каждый день должен быть на новой строке, пытаясь добавить "+"
', но это тоже не работает Отображается в массиве, таком как:

{"Days":
["Sunday":"10.00", "Monday":"12.00", "Tuesday":"09.00", "Wednesday":"10.00", "Thursday":"02.00", "Friday":"05.00", "Saturday":"08.00"]
}

И мне нужно вывести Dayname & time for all.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2010
$.getJSON(url,
    function(data){
      $.each(data.items, function(i,item){
      $('#testfield').html('<p>' + item.d.title + '</p>');
      });
    });

В этом коде вы в конечном итоге замените HTML элемента с идентификатором 'testfield' значением снова и снова ... вы можете попробовать использовать jQuery.append для добавить все записи, как вы указали выше

$.getJSON(url,
    function(data){
      $.each(data.items, function(i,item){
      $('#testfield').append('<p>' + item.d.title + '</p>');
      });
    });
1 голос
/ 29 апреля 2010

Надеюсь, этот пример укажет вам правильное направление


<html>
<head>
  <title>Stackoverflow</title>
  // ** POINT THIS TO A VALID jquery.js LOCATION
  <script src="jquery.js" type="text/javascript"></script>
  <script>
    var days = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ];
    // *****************************************************
    // This is your data from getJSON if correctly formatted
    var data = '{"Days":[ {"Sunday":"10.00"}, {"Monday":"12.00"}, {"Tuesday":"09.00"}, {"Wednesday":"10.00"}, {"Thursday":"02.00"}, {"Friday":"05.00"}, {"Saturday":"08.00"}]}';
    runUpdate = function() {
      // *******************************************************
      // Clear the div of all data by replacing it
      $('#testfield').replaceWith('<div id="testfield"></div>');
      var dataObject= $.parseJSON( data );
      $.each( dataObject.Days, function (index, value) {
        // ********************************************
        // Append new elements to the newly created div
        $('#testfield').append("<p>"+days[index]+": "+value[ days[index] ]+"</p>");
      });
    };

    runReset = function() {
      $('#testfield').replaceWith('<div id="testfield">This is original text.</div>');
    };
  </script>
</head>
<body>
  <div id="testfield">
    This is original text.
  </div>
  <div>
    <input type="button" value="Run Update" onclick="runUpdate();" />
    <input type="button" value="Reset" onclick="runReset();" />
  </div>
</body>
</html>
1 голос
/ 28 апреля 2010

В ваших данных JSON есть ошибка: вы не используете двоеточия после "d" в последних трех элементах. Это пример реальных данных, которые использует ваше приложение, или пример данных, демонстрирующих вашу проблему?

...