Google javascript - 访问和重命名数字对象名称

时间:2014-03-17 07:23:13

标签: javascript json

我将json数据导入到google脚本中:

var doc = Utilities.jsonParse(txt);

我可以访问大多数这样的对象......

var date = doc.data1.dateTime;
var playerName = doc.data1.playerName;
var playerId = doc.data1.playerID;
var teamNumber = doc.data2.personal.team;

我需要访问的一堆对象将数字作为对象名称...

doc.data2.personal.team.87397394.otherdata
doc.data2.personal.team.87397395.otherdata
doc.data2.personal.team.87397396.otherdata
doc.data2.personal.team.87397397.otherdata

...但是当我尝试用...读取数据时

var teamId = doc.data2.personal.team.87397394;

......我收到错误"失踪;在陈述之前。"

我试过了......

var teamId = doc.data2.personal.team[87397394];

...得到" teamId undefined"在日志中。

我也用同样的结果把它绑起来......

var teamId = doc.data2.personal.team[+'6803761'];

我可以使用"非常容易地将名称作为字符串读入;对于In",但无法访问对象本身。到目前为止,我发现的每个例子都使用括号,因此我很难接下来要尝试的内容。

谢谢! 布赖恩

更新

我根据您的建议使用此方法将对象名称转换为变量并使用括号中的变量。没有错误,但 var test 仍然是"未定义" ...

for(var propertyName in doc.data2.personal.team) {
    // propertyName is what you want
    // you can get the value like this: myObject[propertyName]
    Logger.log (propertyNames);
    var test = doc.data2.personal.team[propertyName];
}

日志显示对象名称,如预期的那样...
87397394个
87397395个
87397396个
87397397

我认为这是Google实施中的一个错误。这是一个例子,如果有人想验证它。 测试将返回undefined ...

function myFunction1() {
  var txt = UrlFetchApp.fetch("http://www.hersheydigital.com/replays/replays_1.json").getContentText();
  var doc = Utilities.jsonParse(txt);
  for(var propertyName in doc.datablock_battle_result.vehicles) {
      Logger.log (propertyName);
      var test = doc.datablock_battle_result.vehicles[propertyName];
   }
}

1 个答案:

答案 0 :(得分:1)

问题似乎出在Utitlies.jsonParseThe following works fine

var txt = UrlFetchApp.fetch("http://www.hersheydigital.com/replays/replays_1.json").getContentText();
var doc = JSON.parse(txt);
for(var propertyName in doc.datablock_battle_result.vehicles) {
    var vehicle = doc.datablock_battle_result.vehicles[propertyName];
    Logger.log('Vehicle id is ' + propertyName);
    Logger.log('Vehicle value is  ' + JSON.stringify(vehicle));
    break;
}