Разбор сложного массива с помощью GetJSON Jquery - PullRequest
1 голос
/ 29 апреля 2010

TLDR:

  1. Начинается с , этот вопрос упростил его после того, как некоторые из них заработали и продолжают здесь.
  2. Мне нужно 'получить' массив JSON
  3. Отформатируйте его правильно и для каждого в массиве поместите его в соответствующий DIV.
  4. ??
  5. Работает.

Это продолжение этого вопроса для упрощения и продолжения.

Мне нужны некоторые сложные данные JSON из массива. С этим мне нужен заголовок и его ценность. Причина, по которой я это делаю, заключается в том, что я буду знать, как называется массив, а не данные, которые в нем генерируются.

Допустим, этот новый массив выглядит следующим образом:

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

Исправлено благодаря (Мэтью Флешен)

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

Мой код для синтаксического анализа на данный момент выглядит следующим образом:

$.getJSON(url,
    function(data){
      $.each(data, function(i,item){
      $('.testfield').append('<p>' + item + '</p>');
      });
    });

Без добавления времени на каждую дату он будет анализировать данные следующим образом:

Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday

Со временем, добавленным к дням в массиве, Firebug больше не распознает его как строку JSON. Так что я думаю, что я отформатировал что-то здесь Кроме того, мне нужно каждый день и время, чтобы быть на новой линии, я думал, что

$('.testfield').append('<p>' + item + '</p>' + '<br />');

применил бы каждый к новой строке, но это не сработало.

  1. Как получить, чтобы каждый день или элемент появлялись на новой строке?
  2. Как мне получить $ getjson для правильного анализа дня и его значения в div?

Ответы [ 3 ]

2 голосов
/ 29 апреля 2010

Попробуйте это (переформатировать JSON - в следующий раз проверьте свой JSON с JSONLint ):

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

Скрипт для работы с ним:

 $.getJSON( url, function(data){
  $.each(data.Days[0], function(key,value){
   $('.testfield').append('<p>' + key + ' : ' + value + '</p>');
  });
 });
1 голос
/ 29 апреля 2010

Это не допустимый JSON. Сделайте что-то вроде:

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

Всегда используйте JSONLint или другой валидатор для проверки вашего синтаксиса.

0 голосов
/ 29 апреля 2010

Немного не по теме, но если вы не уверены в содержании, вам следует использовать безопасный метод для вставки данных в DOM. В противном случае ваш код имеет уязвимость XSS.

И помимо того, что это проблема безопасности, любые данные, такие как "Foo Bar ", не будут отображаться так, как вы (вероятно) хотели.

Например, вы можете использовать метод jQuery text ():

$('.testfield').append($('<p></p>').text(item));
...