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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваша проблема в том, что ваш результат представляет собой своего рода словарь внутри первого элемента массива. Вы можете дезинфицировать данные в обратном вызове 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/
Идеальное элегантное решение, простая формулировка. Спасибо!
Вы можете изменить rt.php? IMO, я думаю, было бы проще вернуть оттуда правильную структуру json, чем преобразовывать ее с помощью javascript.