Полиморфизм - это когда вы можете рассматривать объект как универсальную версию чего-либо, но когда вы обращаетесь к нему, код определяет, какой именно он есть, и вызывает связанный код.
Вот пример в 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, который не знает, сколько колес имеет каждый из его подклассов, но знает, что каждый подкласс отвечает за то, сколько колес у него есть.
Затем мы добавим в список велосипед, автомобиль и грузовик.
Затем мы можем прокрутить каждое транспортное средство в списке и относиться к ним одинаково одинаково, однако, когда мы обращаемся к каждому типу транспортных средств, Класс транспортного средства делегирует выполнение этого кода соответствующему подклассу.
Этот код называется полиморфным, поскольку точный код, который выполняется, определяется подклассом, на который ссылаются во время выполнения.
Надеюсь, это вам поможет.
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>
Во-первых: обратный вызов 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>