Javascript 在JSON中选择Object.keys

Javascript 在JSON中选择Object.keys,javascript,arrays,json,Javascript,Arrays,Json,想知道是否有人可以帮我做下面的JS?我正在尝试从API映射数据 var result = Object.keys(data).map(k => [new Date(k).getTime(), data[k]]); 这在类似于 {"2017-12-26":0,"2017-12-27":26,"2017-12-28":0} 但如果数组是 {"2017-12-21":{"nb_pageviews":10,"nb_uniq_pageviews":4,"nb_downloads":0,"nb_u

想知道是否有人可以帮我做下面的JS?我正在尝试从API映射数据

var result = Object.keys(data).map(k => [new Date(k).getTime(), data[k]]);
这在类似于

{"2017-12-26":0,"2017-12-27":26,"2017-12-28":0}
但如果数组是

{"2017-12-21":{"nb_pageviews":10,"nb_uniq_pageviews":4,"nb_downloads":0,"nb_uniq_downloads":0,"nb_outlinks":4,"nb_uniq_outlinks":2,"nb_searches":0,"nb_keywords":0,"avg_time_generation":0.299},"2017-12-22":{"nb_pageviews":8,"nb_uniq_pageviews":4,"nb_downloads":0,"nb_uniq_downloads":0,"nb_outlinks":1,"nb_uniq_outlinks":1,"nb_searches":0,"nb_keywords":0,"avg_time_generation":0.453}}
如何仅获取
nb_页面浏览量
的数据以及每个日期的

这将在NVD3图表中用作

d3.json(`https://discovrbookings.innocraft.cloud/?module=API&method=VisitsSummary.getVisits&idSite=2&period=day&date=last30&format=json&token_auth=68aa5bd12137f13255dcb98794b65dff`,函数(数据1){
d3.json(`https://discovrbookings.innocraft.cloud/?module=API&method=VisitsSummary.getUniqueVisitors&idSite=2&period=day&date=last30&format=json&token_auth=68aa5bd12137f13255dcb98794b65dff`,函数(数据2){
d3.json(`https://discovrbookings.innocraft.cloud/?module=API&method=VisitsSummary.getActions&idSite=2&period=day&date=last30&format=json&token_auth=68aa5bd12137f13255dcb98794b65dff`,函数(数据3){
d3.json(`https://discovrbookings.innocraft.cloud/?module=API&method=VisitsSummary.getBounceCount&idSite=2&period=day&date=last30&format=json&token_auth=68aa5bd12137f13255dcb98794b65dff`,函数(数据4){
d3.json(`https://discovrbookings.innocraft.cloud/?module=API&method=API.get&format=json&idSite=2&period=day&date=last30&token_auth=68aa5bd12137f13255dcb98794b65dff`,函数(数据5){
var result=Object.keys(data1.map)(k=>[newdate(k).getTime(),data1[k]]);
数据1={
“关键”:“访问”,
“价值”:结果
};
var result=Object.keys(data2.map)(k=>[newdate(k.getTime(),data2[k]]);
数据2={
“关键”:“独特访问”,
“价值”:结果
};
var result=Object.keys(data3.map)(k=>[newdate(k.getTime(),data3[k]]);
数据3={
“键”:“操作”,
“价值”:结果
};
var result=Object.keys(data4.map)(k=>[newdate(k.getTime(),data4[k]]);
数据4={
“键”:“反弹”,
“价值”:结果
};
var result=Object.keys(数据5)
.filter(k=>!isNaN(数据5[k].nb_页面浏览量))
.map(k=>[newdate(k).getTime(),data5[k].nb_页面浏览量];
数据5={
“键”:“页面视图”,
“价值”:结果
};
var数据=[];
数据推送(data1);
数据推送(data2);
数据推送(data3);
数据推送(data4);
数据推送(data5);
(功能(){
nv.addGraph(函数(){
var chart=nv.models.lineChart()
.保证金({
左:45,
右:30
})
.x(功能(d){
返回d[0]
})
.y(功能(d){
返回d[1]
})
.useInteractiveGuideline(正确);
chart.xAxis
.d格式(函数(d){
返回d3.time.format(“%m/%d/%y”)(新日期(d))
});
图1.yAxis
.d.格式(d3.格式('d'));
图.雅克西斯(15);
图表.xAxis.tickPadding(15);
d3.选择(“#summaryChart svg”)
.基准(数据)
.transition().持续时间(500)
.电话(图表);
nv.utils.windowResize(图表更新);
$('汇总表')。数据('图表',图表);
收益表;
});
})();
});
});
});
});
});
#汇总表{
高度:300px;
}

只需更改访问
数据[k]的方法即可。注意,网页浏览量

var result = Object.keys(data).map(k => [ new Date(k).getTime(), data[k].nb_pageviews ]);
一些日期没有
nb_页面浏览量
属性,因此您可能还需要过滤掉它们

var result = Object.keys( data )
      .filter( k => !isNaN( data[k].nb_pageviews ) )
      .map(k => [ new Date(k).getTime(), data[k].nb_pageviews ] );
编辑

如果想要“0”而不是过滤掉那些没有
nb\u页面浏览量
属性的日期,那么就选择它

data[k].nb_pageviews || 0

最后

var result = Object.keys( data )
      .map(k => [ new Date(k).getTime(), ( data[k].nb_pageviews || 0 ) ] );

第二个看起来无效,密钥从一开始就丢失了。提供的JSON数据是有效的JSON格式吗?从这里开始-我从上面的链接复制时出错。谢谢你指出这一点。非常感谢,当它允许我的时候,我将标记为已回答。如果是一个简单的请求,那么我是否希望没有
nb\u页面视图
属性的日期显示
0
呢。数据正在图表上使用,并导致空格。@Darren My bad,我已经更新了代码。基本上我需要检查
isNaN
.Steller。。。再次感谢!很抱歉,更新的代码显示属性为空的空白。是否有其他方法添加这些空属性a
0
?我更新了我的问题,以包括正在使用的图表,以便您可以详细了解我的意思。提前感谢您的进一步帮助。
var result = Object.keys( data )
      .map(k => [ new Date(k).getTime(), ( data[k].nb_pageviews || 0 ) ] );