首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Apps脚本中按列名导出JSON的Google

在Apps脚本中按列名导出JSON的Google
EN

Stack Overflow用户
提问于 2022-09-14 13:44:10
回答 1查看 103关注 0票数 0

我正在探索如何使用JSON导出的Google作为应用程序脚本的数据库。

获取的url遵循以下结构:https://docs.google.com/spreadsheets/d/DOCUMENTID/gviz/tq?tqx=out:json&gid=SHEETID

JSON.json

代码语言:javascript
复制
{
    "reqId": "0",
    "sig": "000",
    "status": "ok",
    "table": {
        "cols": [
            {
                "id": "A",
                "label": "",
                "type": "string"
            },
            {
                "id": "B",
                "label": "",
                "type": "string"
            },
            {
                "id": "C",
                "label": "",
                "type": "string"
            }
        ],
        "parsedNumHeaders": 0,
        "rows": [
            {
                "c": [
                    {
                        "v": "Data 1-1"
                    },
                    {
                        "v": "Data 1-2"
                    },
                    {
                        "v": "Data 1-3"
                    }
                ]
            },
            {
                "c": [
                    {
                        "v": "Data 2-1"
                    },
                    {
                        "v": "Data 2-2"
                    },
                    {
                        "v": "Data 2-3"
                    }
                ]
            },
            {
                "c": [
                    {
                        "v": "Emails"
                    },
                    {
                        "v": "Ids"
                    },
                    {
                        "v": "Names"
                    }
                ]
            }
        ]
    },
    "version": "0.6"
}

在这个函数中,我将得到C列的一个值数组:dataArray =Data1-3,Data2-3

代码语言:javascript
复制
function getRolePermission(databaseUrl) {

  let databaseParsed = JSON.parse(UrlFetchApp.fetch(databaseUrl).getContentText().match(/(?<=.*\().*(?=\);)/s)[0]);
  let tableLength = Object.keys(databaseParsed.table.rows).length;

  let dataArray = [];
  for (let i = 0; i < tableLength; i++) {
    dataArray.push(databaseParsed.table.rows[i].c[2].v)
  }

  return dataArray;

}

它工作得很好,但是我不知道如何使这个函数更通用,所以我用(url,headerName)参数调用它来获得一个列值的数组。类似于:

代码语言:javascript
复制
function getRolePermission(databaseUrl, headerName) {
  // CODE ??
  return dataArray;
}

getRolePermission('https://docs.google.com/spreadsheets/d/1lc...', 'Emails')

要获得dataArray =Data1-3,数据2-3,所以如果更改列的顺序,结果仍然是相同的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-14 15:25:59

代码语言:javascript
复制
dataArray.push(databaseParsed.table.rows[i].c[2].v)

您只需在这里找到index 2,就可以使该函数更加通用。table.cols应该为您提供列标题,但是它不会这样做,因为在您的情况下,parsedNumHeaders是0。若要手动设置页眉数,请使用&headers=1。网址应该看起来像:

https://docs.google.com/spreadsheets/d/DOCUMENTID/gviz/tq?tqx=out:json&gid=SHEETID&headers=1

随后的反应将是:

代码语言:javascript
复制
{
  "reqId": "0",
  "sig": "000",
  "status": "ok",
  "table": {
    "cols": [
      {
        "id": "A",
        "label": "Names",
        "type": "string"
      },
      {
        "id": "B",
        "label": "Ids",
        "type": "string"
      },
      {
        "id": "C",
        "label": "Emails",
        "type": "string"
      }
    ],
    "parsedNumHeaders": 1,
    "rows": [
      {
        "c": [
          {
            "v": "Data 1-1"
          },
          {
            "v": "Data 1-2"
          },
          {
            "v": "Data 1-3"
          }
        ]
      },
      {
        "c": [
          {
            "v": "Data 2-1"
          },
          {
            "v": "Data 2-2"
          },
          {
            "v": "Data 2-3"
          }
        ]
      }
    ]
  },
  "version": "0.6"
}

一旦得到标题,就可以找到索引:

代码语言:javascript
复制
const columnNeeded = databaseParsed.table.cols.findIndex(obj => obj.label === headerName/*"Emails"*/);

然后,在您的函数中使用它。

代码语言:javascript
复制
dataArray.push(databaseParsed.table.rows[i].c[columnNeeded].v)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73717949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档