在Google脚本中解析JSON信息,不使用重复出现的第一个标记

6uxekuva  于 11个月前  发布在  Go
关注(0)|答案(2)|浏览(74)

在google sheet中,我有一个脚本来从url中检索JSON

function getTeamData() {
  var DATA_SPREADSHEET_ID = "xxxx";
  var ss = SpreadsheetApp.openById(DATA_SPREADSHEET_ID);
  var TeamDataSheet = ss.getSheetByName("rawTeam");
  TeamDataSheet.clearContents();

  var url = 'xxxx';

  var response = UrlFetchApp.fetch(url);

  var content = response.getContentText();
  var data = JSON.parse(content);
  //Logger.log(JSON.stringify(data));

字符串
我遇到的问题是JSON内容看起来像这样

{
    "03wi4": {
        "statsIncId": 5546,
        "rotowireId": 3795,
        "name": "Saunders, Wesley",
        "fantraxId": "03wi4",
        "team": "NY",
        "position": "SG"
    },
    "059gh": {
        "statsIncId": 6321,
        "rotowireId": 4919,
        "name": "Booth, Phil",
        "fantraxId": "059gh",
        "team": "(N/A)",
        "position": "PG"
    },
    "02nfe": {
        "statsIncId": 5020,
        "rotowireId": 3308,
        "sportRadarId": "c555e067-c4d5-43f6-99af-716b6005cbba",
        "name": "Henson, John",
        "fantraxId": "02nfe",
        "team": "NY",
        "position": "PF"
    },
    "033b7": {
        "statsIncId": 5235,
        "rotowireId": 3538,
        "name": "Raduljica, Miroslav",
        "fantraxId": "033b7",
        "team": "(N/A)",
        "position": "C"
    },
...
}


我希望能够返回每个参赛作品的团队,但我没有一个共同的第一个标签名称..

059gh    (N/A)
02nfe    NY
033b7    (N/A)```

f45qwnt8

f45qwnt81#

我相信你的目标如下。

  • 您希望从显示JSON对象中检索像[["03wi4","NY"],["059gh","(N/A)"],["02nfe","NY"],["033b7","(N/A)"]]这样的值。
  • 您显示的JSON对象是var data = JSON.parse(content);data

在这种情况下,如何进行以下修改?

修改脚本:

function getTeamData() {
  var DATA_SPREADSHEET_ID = "xxxx";
  var ss = SpreadsheetApp.openById(DATA_SPREADSHEET_ID);
  var TeamDataSheet = ss.getSheetByName("rawTeam");
  TeamDataSheet.clearContents();

  var url = 'xxxx';
  var response = UrlFetchApp.fetch(url);
  var content = response.getContentText();
  var data = JSON.parse(content);

  // I added the below script.
  var res = Object.entries(data).map(([k, { team }]) => [k, team]);
  TeamDataSheet.getRange(1, 1, res.length, res[0].length).setValues(res);
}

字符串

TeamDataSheet.getRange(1, 1, res.length, res[0].length).setValues(res);

TeamDataSheet.getRange(1, 1, res.length, res[0].length).setNumberFormat("@").setValues(res);

  • 或者,
var res = Object.entries(data).map(([k, { team }]) => [k, team]);
  TeamDataSheet.getRange(1, 1, res.length, res[0].length).setValues(res);

var res = Object.entries(data).map(([k, { team }]) => [`'${k}`, team]);
  TeamDataSheet.getRange(1, 1, res.length, res[0].length).setValues(res);

注:

  • 在这个修改中,它假设data的值是你的显示JSON对象。请注意这一点。

参考资料:

  • map()
  • setNumberFormat(numberFormat)
pexxcrt2

pexxcrt22#

使用Object.keys来替换Array.map

/*<ignore>*/console.config({maximize:true,timeStamps:false,autoScroll:false});/*</ignore>*/ 
const json = {
"03wi4": {
    "statsIncId": 5546,
    "rotowireId": 3795,
    "name": "Saunders, Wesley",
    "fantraxId": "03wi4",
    "team": "NY",
    "position": "SG"
},
"059gh": {
    "statsIncId": 6321,
    "rotowireId": 4919,
    "name": "Booth, Phil",
    "fantraxId": "059gh",
    "team": "(N/A)",
    "position": "PG"
},
"02nfe": {
    "statsIncId": 5020,
    "rotowireId": 3308,
    "sportRadarId": "c555e067-c4d5-43f6-99af-716b6005cbba",
    "name": "Henson, John",
    "fantraxId": "02nfe",
    "team": "NY",
    "position": "PF"
},
"033b7": {
    "statsIncId": 5235,
    "rotowireId": 3538,
    "name": "Raduljica, Miroslav",
    "fantraxId": "033b7",
    "team": "(N/A)",
    "position": "C"
},
}
const values = Object.keys(json).map(k => [/*prepend ' for maintaining text format in sheets*/"'"+k, json[k].team])
console.table(values)

个字符

相关问题