Доступ к данным во вложенном массиве JSON с помощью jquery

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

Вот пример в C #. Создайте четыре класса в консольном приложении:

public abstract class Vehicle
{
    public abstract int Wheels;
}

public class Bicycle : Vehicle
{
    public override int Wheels()
    {
        return 2;
    }
}

public class Car : Vehicle
{
    public override int Wheels()
    {
        return 4;
    }
}

public class Truck : Vehicle
{
    public override int Wheels()
    {
        return 18;
    }
}

Теперь создайте в основном () модуля для консольного приложения следующее:

public void Main()
{
    List<Vehicle> vehicles = new List<Vehicle>();

    vehicles.Add(new Bicycle());
    vehicles.Add(new Car());
    vehicles.Add(new Truck());

    foreach (Vehicle v in vehicles)
    {
        Console.WriteLine(
            string.Format("A {0} has {1} wheels.",
                v.GetType().Name, v.Wheels));
    }
}

В этом примере мы создайте список базового класса Vehicle, который не знает, сколько колес имеет каждый из его подклассов, но знает, что каждый подкласс отвечает за то, сколько колес у него есть.

Затем мы добавим в список велосипед, автомобиль и грузовик.

Затем мы можем прокрутить каждое транспортное средство в списке и относиться к ним одинаково одинаково, однако, когда мы обращаемся к каждому типу транспортных средств, Класс транспортного средства делегирует выполнение этого кода соответствующему подклассу.

Этот код называется полиморфным, поскольку точный код, который выполняется, определяется подклассом, на который ссылаются во время выполнения.

Надеюсь, это вам поможет.

0
задан Anurag Srivastava 5 March 2019 в 08:04
поделиться

2 ответа

programming_class также является массивом с одним элементом. Так что ...

data[0].programming_class[0]

Вот рабочая функция обработки данных.

$(function() {

    var json = '[{"call_sign":"KTAB-TV","facility_id":"59988","operator":"Nexstar Media Group Inc","programming_class":[{"primary":{"programming":"CBS","resolution":"1080i","resolution_type":"HD","programming_classifier":"HD1"},"d_2":{"programming":"Telemundo","resolution":"480i","resolution_type":"SD","programming_classifier":"SD1"},"d_3":{"programming":"Escape","resolution":"480i","resolution_type":"SD","programming_classifier":"SD2"},"d_4":{"programming":"ION","resolution":"480i","resolution_type":"SD","programming_classifier":"SD3"},"d_5":{"programming":"None","resolution":"NULL","resolution_type":"N/A","programming_classifier":"None"},"d-6":{"programming":"None","resolution":"NULL","resolution_type":"N/A","programming_classifier":"None"}}]}]';

    function handleData(data) {
        var pc = data[0]['programming_class'][0];
        var ret = [];
        for (var i in pc) {
            if (pc.hasOwnProperty(i)) {
                for (var j in pc[i]) {
                    if (pc[i].hasOwnProperty(j)) {
                        if (j == 'resolution') {
                            ret.push(pc[i][j]);
                        }
                    }
                }
            }
        }
        return ret;
    }

    var stuff = handleData(JSON.parse(json));

    $('#content').text(stuff.join(', '));

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="content"></div>

0
ответ дан Bitwise Creative 5 March 2019 в 08:04
поделиться

Во-первых: обратный вызов getJSON не возвращает (key, value), он возвращает (parseArray, successString) =>, поэтому ваш цикл не будет работать. Проверьте ниже, возможное решение может быть: -

$.getJSON("https://api.jsonbin.io/b/5c7e2d275fe214587796753b", (data) => {
  
  // $.getJSON callback format returns  (data, status)
  // so if you get it as (key, value) you will get (Your JSON Array, "success") 
  // Solution is below
  
  data.forEach((value, key) => {
      if(value.programming_class){
          // programming class is an array in provided JSON
          // you can use static first index as well if it is fixed
          // value = value[0] to avoid  outer loop;
          value.programming_class.forEach((p) => {
              // p is not an array
              let keys = Object.keys(p);
              keys.forEach((k) => {
                  let classObj = p[k];
                  console.log(classObj);
                  // now you can perform actions on this object i-e: sum, multiple whatever
              });
          });
      }
  })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>

0
ответ дан Farooq Ahmed Khan 5 March 2019 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: