[英]JSON/JS Object accessing key when you don't know the name in Google Apps Script
我正在使用Google Apps脚本中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
}
}
我尝试了以下链接,但似乎都没有答案:
获取JavaScript对象键列表 如何使用动态键访问对象? 如何使用javascript访问键本身 ,如果不知道名称,如何访问javascript对象的属性?
我只是使用香草Google Apps脚本,因为我对Jquery等没有任何经验。
任何帮助将非常感激!
我通常使用一个如下所示的辅助函数:
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({});
});
在循环内,变量i
包含当前键。 用i
替换空字符串应该给您您所需要的。
您可能还希望查看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
来简化您使用显式循环所做的一些事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.