Datatable JSON с именами динамических массивов

Я пытаюсь вытащить приведенную ниже ссылку JSON в Datatable. Проблема, с которой я столкнулся, заключается в том, что данные для каждой акции находятся в ее собственном массиве, а имена массивов (тикеры) являются динамическими. В этом примере перечислено только 3 акции, но JSON обычно содержит около 100.

Мне удалось использовать приведенный ниже сценарий для отображения одной строки, ориентируясь на конкретную акцию, но поскольку каждая акция является не объектом, а массивом, я не могу просто ввести 0 (т. Е. {"Data": "0.quote. символ "}) для каждого из четырех столбцов, чтобы заполнить таблицу всеми акциями в JSON. Есть ли способ ссылаться на JSON в его текущей форме? Если нет, как мне преобразовать его, чтобы он был в доступном формате?

Заранее спасибо!

    $(document).ready(function() {
        var table = $('#headlines-table').DataTable( {
        "ajax": {
            "url": '/php/rt.php',
            "dataSrc": "data",
        },
        "columns": [
        { "data": "AAPL.quote.symbol" },
        { "data": "AAPL.quote.latestPrice" },
        { "data": "AAPL.quote.latestVolume" },
        { "data": "AAPL.quote.avgTotalVolume" }
  ]
    } );
} );

ВХОД JSON:

{"data":[{
"AAPL":{"quote":{"symbol":"AAPL","latestPrice":172.5,"latestVolume":17376726,"avgTotalVolume":33742427}},
"BA":{"quote":{"symbol":"BA","latestPrice":326.63,"latestVolume":3383911,"avgTotalVolume":6309861}},
"CA":{"quote":{"symbol":"CA","latestPrice":34.45,"latestVolume":1397950,"avgTotalVolume":2698759}}
}]}

rt.php:

$json = file_get_contents('https://api.iextrading.com/1.0/stock/market/batch?types=quote&filter=symbol,latestPrice,latestVolume,avgTotalVolume&symbols=aapl,ba,ca');
$data[data] = array(json_decode($json));
$obj = json_encode($data);
echo $obj;

Вы можете изменить rt.php? IMO, я думаю, было бы проще вернуть оттуда правильную структуру json, чем преобразовывать ее с помощью javascript.

nanocv 11.04.2018 22:14

@nanocv У меня есть доступ к rt.php, но я не могу изменить структуру JSON. Прямо сейчас все, что делает rt.php, - это берет ответ JSON от IEX и помещает его в объект "data", чтобы таблицы данных могли его прочитать. Я добавил код для rt.php в сообщение выше.

retroActive 11.04.2018 22:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема в том, что ваш результат представляет собой своего рода словарь внутри первого элемента массива. Вы можете дезинфицировать данные в обратном вызове dataSrc:

var table = $('#headlines-table').DataTable( {
  ajax: {
    url: '/php/rt.php',
    dataSrc: function(d) {
      var result = [];
      for (var prop in d.data[0]) {
        result.push(d.data[0][prop].quote);
      }
      return result;
    }
  },
  columns: [
    { data: "symbol" },
    { data: "latestPrice" },
    { data: "latestVolume" },
    { data: "avgTotalVolume" }
  ]
})

Вышеупомянутое возвращает массив в форме

[{ symbol: '..', latestPrice: '..' , latestVolume: '..', .. }, { .. }, ..]

вот демо -> http://jsfiddle.net/2umtx1a7/

Идеальное элегантное решение, простая формулировка. Спасибо!

retroActive 12.04.2018 04:45

Другие вопросы по теме