Javascript 具有动态数组名称的Datatable JSON
我试图将下面的引用JSON拉入数据表。我遇到的问题是,每个股票的数据都在它自己的数组中,数组名称(股票代码)是动态的。在本例中,只列出了3只股票,但JSON通常包含大约100只股票 我已经能够使用下面的脚本以特定股票为目标来显示一行,但是由于每个股票不是一个对象而是一个数组,所以我不能简单地为四列中的每一列键入0(即{“data”:“0.quote.symbol”}),以便用JSON中的所有股票填充表。有没有一种方法可以引用当前形式的JSON?如果没有,我如何转换它,使其成为可访问的格式 提前谢谢Javascript 具有动态数组名称的Datatable JSON,javascript,php,json,datatables,transform,Javascript,Php,Json,Datatables,Transform,我试图将下面的引用JSON拉入数据表。我遇到的问题是,每个股票的数据都在它自己的数组中,数组名称(股票代码)是动态的。在本例中,只列出了3只股票,但JSON通常包含大约100只股票 我已经能够使用下面的脚本以特定股票为目标来显示一行,但是由于每个股票不是一个对象而是一个数组,所以我不能简单地为四列中的每一列键入0(即{“data”:“0.quote.symbol”}),以便用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;
您的问题是,您的结果是数组第一项中的一种字典。您可以在
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" }
]
})
上面返回表单上的一个数组
这是一个演示->您可以修改rt.php吗?在我看来,从那里返回正确的json结构比用javascript转换要容易得多。@nanocv我确实可以访问rt.php,但我无法更改json结构。现在rt.php所做的就是从IEX获取JSON响应,并将其放入datatables的“data”对象中进行读取。我已经在上面的帖子中添加了rt.php的代码。一个完美优雅的解决方案,简单明了。非常感谢。