Как получить значения, сделав сравнение в этом результате JSON

0

У меня есть этот JSON. Мне нужно сначала сравнить значения в teams со значениями в html_content.position[i] где i должен быть циклом var, а затем, если сравнение возвращает true, тогда получите значение. См. Этот пример:

html_content.position[0][0].toLowerCase() = "navegantes";

Затем я должен сравнивать с каждым значением в teams и если есть какой-либо ключ, который равен es, тогда я должен получить значение, взяв пример, я должен получить это значение:

"img\/magallanes.jpg"

Может ли кто-нибудь мне помочь?

  • 1
    Это совершенно ясно, если вы посмотрите на его пример вывода JSON.
  • 0
    использовать инструменты отладчика.
Теги:
arrays

2 ответа

1
Лучший ответ

Проблема заключается в том, что вы используете этот код:

html_content.position[0][0].toLowerCase() = "navegantes";

html_content.position самом деле представляет собой массив массивов массивов (хотя в вашем примере данные каждый внутренний массив имеет только длину 1... это всегда верно?), поэтому вам нужен еще один оператор скобок, чтобы проверить значение html_content.position[i][0][0]

Вот пример, который включает ваши данные JSON, просматривает каждую команду и находит соответствующую position: (см. Ниже рабочую демонстрацию JSfiddle)

Код решения:

var matches = [];

for(var teamName in json.teams)
{
   for(var i = 0, len = json.html_content.position.length; i < len; i++)
   {
      if(json.html_content.position[i][0][0].toLowerCase() === teamName.toLowerCase())
      {
          // found a match. do something with it..
          matches[matches.length] = {Name: teamName, Value: json.teams[teamName]};
          break;
      }
   }
}

JSON: (для справки, поскольку ранее был опубликован только на стороннем сайте)

var json = {
      "response":true,
      "teams":{
         "navegantes":"img\/magallanes.jpg",
         "tigres":"img\/tigres.jpg",
         "caribes":"img\/caribes.jpg",
         "leones":"img\/leones.jpg",
         "aguilas":"img\/aguilas.jpg",
         "tiburones":"img\/tiburones.jpg",
         "bravos":"img\/bravos.jpg",
         "cardenales":"img\/cardenales.jpg",
         "maga":"img\/magallanes.jpg",
         "tigr":"img\/tigres.jpg",
         "cari":"img\/caribes.jpg",
         "leon":"img\/leones.jpg",
         "agui":"img\/aguilas.jpg",
         "tibu":"img\/tiburones.jpg",
         "brav":"img\/bravos.jpg",
         "card":"img\/cardenales.jpg"
      },
      "html_content":{
         "position":[
            [
               [
                  "Navegantes",
                  "14",
                  "10",
                  "4",
                  "0"
               ]
            ],
            [
               [
                  "Tigres",
                  "14",
                  "10",
                  "4",
                  "0"
               ]
            ],
            [
               [
                  "Caribes",
                  "14",
                  "9",
                  "5",
                  "1"
               ]
            ],
            [
               [
                  "Leones",
                  "14",
                  "9",
                  "5",
                  "1"
               ]
            ],
            [
               [
                  "Tiburones",
                  "13",
                  "5",
                  "8",
                  "4.5"
               ]
            ],
            [
               [
                  "Aguilas",
                  "14",
                  "5",
                  "9",
                  "5"
               ]
            ],
            [
               [
                  "Bravos",
                  "14",
                  "4",
                  "10",
                  "6"
               ]
            ],
            [
               [
                  "Cardenales",
                  "13",
                  "3",
                  "10",
                  "6.5"
               ]
            ]
         ],
         "current":[
            [
               "MAGA",
               "CARI",
               "7:00 pm",
               "PUERTO LA CRUZ"
            ],
            [
               "AGUI",
               "LEON",
               "4:00 pm",
               "CARACAS"
            ],
            [
               "BRAV",
               "TIGR",
               "5:30 pm",
               "MARACAY"
            ],
            [
               "TIBU",
               "CARD",
               "5:30 pm",
               "BARQUISIMETO"
            ]
         ],
         "next":[
            [
               "MAGA",
               "CARI",
               "6:00 pm",
               "PUERTO LA CRUZ"
            ],
            [
               "AGUI",
               "LEON",
               "1:00 pm",
               "CARACAS"
            ],
            [
               "TIBU",
               "TIGR",
               "5:30 pm",
               "MARACAY"
            ],
            [
               "BRAV",
               "CARD",
               "2:00 pm",
               "BARQUISIMETO"
            ]
         ],
         "previous":[

         ]
      }
   };

См. Пример скрипки здесь: http://jsfiddle.net/VqHpJ/

Пример скрипку создает массив matches, который представляет собой совокупность объектов, представляющих команду Name и Value для соответствующего изображения, и выкладывает их в списке. (Конечно, вы не сказали, что хотите делать, как только найдете совпадение, поэтому вы можете приспособить его по мере необходимости).

Это довольно типичный шаблон для сопоставления элементов в двух массивах (один вложенный цикл), и в моем примере предполагается, что нужно найти только одно совпадение, и в этом случае он break из вложенного цикла и начнет поиск следующей команды, Поэтому производительность - это O (n ^ 2) в худшем случае.

Это немного сложно (но не сложно), потому что у объектов teams самом деле нет массива команд, у него есть определенные свойства для каждого имени команды. Поэтому решение состояло в том, чтобы перебирать свойства объекта teams используя for(var teamName in json.teams). Если вы являетесь автором функции, которая генерирует JSON, вы можете захотеть рассмотреть ее, чтобы вместо этого создать массив команд, например:

var json = {
      "response":true,
      "teams":
      [
         { "Name": "navegantes", "ImageUrl": "img\/magallanes.jpg" },
         { "Name": "tigres", "ImageUrl": "img\/tigres.jpg"},
         { "Name": "caribes", "ImageUrl": "img\/caribes.jpg"},
         ...
      ]
      ...
}
0

Предполагая, что у вас есть строка JSON, которую вы анализировали в объект, который выглядит следующим образом:

var json = {"teams":{
         "navegantes":"img\/magallanes.jpg",
         "tigres":"img\/tigres.jpg",
         "caribes":"img\/caribes.jpg",
         "leones":"img\/leones.jpg",
         "aguilas":"img\/aguilas.jpg",
         ...
}};

Вы можете выполнять итерацию с помощью each()

$.each(json.teams, function(i, v){
   console.log(i);
   console.log(v);
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню