簡體   English   中英

當您在Google Apps腳本中不知道JSON / JS對象訪問密鑰時

[英]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 ]
        ]
    ]
] 

這只是使用mapObject.keys來簡化您使用顯式循環所做的一些事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM