我正在处理Google应用脚本中Webtrends API的回复,我有一个JSON / JS对象,如下所示:
"data": [
{
"period": "Month",
"start_date": "2013-12",
"end_date": "2013-12",
"attributes": {},
"measures": {
"Visits": 500
},
"SubRows": [
{
"facebook.com": {
"attributes": {},
"measures": {
"Visits": 100
},
"SubRows": null
},
"google.co.uk": {
"attributes": {},
"measures": {
"Visits": 100
},
"SubRows": null
},
"newsnow.co.uk": {
"attributes": {},
"measures": {
"Visits": 100
},
"SubRows": null
},
"No Referrer": {
"attributes": {},
"measures": {
"Visits": 100
},
"SubRows": null
},
"t.co": {
"attributes": {},
"measures": {
"Visits": 100
},
"SubRows": null
}
}
]
}
]
我需要访问的是名称,例如facebook.com等...并访问每个SubRows的数字。
我能够获得访问号码,但我无法弄清楚如何获取名称。请注意,名称会不断变化,因为不同的网站每天会发送不同的流量。
我获取访问号码时的代码部分:
for(i in dObj){
var data = dObj[i].SubRows;
var sd = dObj[i].start_date;
var ed = dObj[i].end_date;
if(sd == ed){
var timep = ""+ sd;
}
else{
var timep = ""+ sd + "-" + ed;
}
var subRows = data[0];
Logger.log(subRows);
for(i in subRows){
var row = subRows[i];
var rmeasures = row.measures;
var rvis = rmeasures.Visits;
values = [timep,"",rvis]; //Blank string for where the name of the site would go
}
}
我尝试过以下链接,但似乎没有人能得到答案:
Getting JavaScript object key list How to access object using dynamic key? How to access key itself using javascript How do I access properties of a javascript object if I don't know the names?
我只是使用vanilla谷歌应用程序脚本,因为我没有任何Jquery等经验......
非常感谢任何帮助!
答案 0 :(得分:2)
我通常使用一个看起来像这样的辅助函数:
var keyVal = function(o) {
var key = Object.keys(o)[0];
return {"key": key, "val":o[key]};
} ;
这会将带有变量键的对象映射到键/值对象{key:....,val:{}},这通常很方便,可以使用。
describe.only ("stack overflow answer", function(){
it ("is should create a key/value pair" , function(){
var res = keyVal( {
"facebook.com": {
"attributes": {},
"measures": {
"Visits": 100
},
"SubRows": null
}});
res.key.should.equal('facebook.com');
res.val.attributes.should.deep.equal({});
});
答案 1 :(得分:1)
在循环中,变量i
包含当前键。用i
替换空字符串应该可以满足您的需求。
答案 2 :(得分:1)
您可能还想查看Javascript中内置的一些功能更强大的工具。一些更简洁的代码也可能更明确:
data.map(function(datum) {
var timep = datum.start_date == datum.end_date ? datum.end_date :
(data.start_date + "-" + datum.end_date);
return datum.SubRows.map(function(subRow) {
return Object.keys(subRow).map(function(key) {
return [timep, key, subRow[key].measures.Visits];
});
});
});
会返回一个像这样的对象:
[
[
[
["2013-12", "facebook.com", 100],
["2013-12", "google.co.uk", 100],
["2013-12", "newsnow.co.uk", 100],
["2013-12", "No Referrer", 100],
["2013-12", "t.co", 100 ]
]
]
]
这只是使用map
和Object.keys
来简化您使用显式循环执行的操作。