Google Script从json对象中读取

时间:2017-06-07 20:16:50

标签: google-apps-script google-apps

我正在读一个像这样的json对象:

var url = "not really important"
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
var json = response.getContentText();
var data = JSON.parse(json);
var var seeds = data.entities.seeds;

现在种子有价值,大量的,所以我知道我的所有代码都可以运行到这一点。现在我的问题是解析我需要的某些信息。在这个特定情况下,我需要获得每个参赛者的名字。每个种子与参赛者的比例为1:1,因此我必须使用此API来获取它。

如果我运行以下代码Logger.log(seeds[0].mutations.entrants);,我将得到以下输出:

  

{745803 = {isPlaceholder = null,name = My Team Name,participantIds = [827364,827540,827994],initialSeedNum = 1,id = 745803,playerIds = {827364 = 179632,827540 = 139681,827994 = 268019} }}

正如您所见,name位于名为745803的对象下。我的问题是该对象名称发生了变化,我不知道每个种子的名称是什么。因此,我需要抓住参赛者列出的第一个结果,因为它始终是我需要的参赛者。我怎样才能做到这一点?我尝试了以下内容,但它只是以未定义的方式返回:

seeds[0].mutations.entrants[0].name

底线是,如何在不知道该元素名称的情况下获取基于json的对象中的第一个元素?

1 个答案:

答案 0 :(得分:0)

您可以使用" for"来检索JSON密钥。在这种情况下,即使更改了键,也可以检索它。虽然我不知道您的JSON结构的详细信息,但是根据您的问题,我们会考虑以下两种模式。

模式1:

var json1 = {
  "entrants": {
    "745803": {
      "isPlaceholder": null,
      "name": "My Team Name",
      "participantIds": [
        827364,
        827540,
        827994
      ],
      "initialSeedNum": 1,
      "id": 745803,
      "playerIds": {
        "827364": 179632,
        "827540": 139681,
        "827994": 268019
      }
    }
  }
};
for (var i in json1.entrants){
  Logger.log(json1.entrants[i].name)
}

>>> My Team Name

模式2:

var json2 = {
  "entrants": [
    {
      "745803": {
        "isPlaceholder": null,
        "name": "My Team Name",
        "participantIds": [
          827364,
          827540,
          827994
        ],
        "initialSeedNum": 1,
        "id": 745803,
        "playerIds": {
          "827364": 179632,
          "827540": 139681,
          "827994": 268019
        }
      }
    }
  ]
};
for (var i in json2.entrants){
  for (var j in json2.entrants[i]){
    Logger.log(json2.entrants[i][j].name)
  }
}

>>> My Team Name

如果我误解了你的问题,我很抱歉。