【问题标题】:Filter the output of Logger.log to only show specific parts过滤 Logger.log 的输出以仅显示特定部分
【发布时间】:2022-11-30 19:24:50
【问题描述】:

我有一个简单的函数(如下所示),它列出了 Google Workspace 域的所有现有架构值。我只想检索特定项目。

这是我的功能:

function listSchema() {

const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName("Domain Schema");
const schemaSafeName = sheet.getRange(4,2).getValue();

try{
    Logger.log(AdminDirectory.Schemas.get('my_customer',schemaSafeName));
  }
  catch(error){
    const {code, message} = error.details;

    if(code === 400 || code === 404 || code === 409 || code === 412){
      console.log("Error 400 or 404 or 409 or 412");
    }
    else {
      console.log(`${code} - ${message}`);
    }
  }  
}

Logger.log(经过美化和注释)输出如下:

{
 etag="eObIY8zBQ9kCV0dcsWouNipdJvA0", // DON'T WANT THIS
  
  displayName=Test Schema Group,
      
   fields=
     [
      {
       fieldId=87mf1ADjQwuyvPaKPIa2uw==, // DON'T WANT THIS
       readAccessType=ADMINS_AND_SELF,
       displayName=Test Field1,
       fieldType=BOOL,
       fieldName=Test_Field1,
       etag="eObIY8zBQ9kCV03CoXVqpKE7PI", // DON'T WANT THIS
       multiValued=false,
       kind=admin#directory#schema#fieldspec // DON'T WANT THIS
      },
      {
       multiValued=false,
       fieldName=Test_Field2,
       displayName=Test Field2,
       etag="eObIY8zBQ9kCSggLJvV_R8EVdhq8S0O3A", // DON'T WANT THIS
       fieldType=BOOL,
       fieldId=7pRb-wPQQE2cyVvniaJA==, // DON'T WANT THIS
       readAccessType=ADMINS_AND_SELF,
       kind=admin#directory#schema#fieldspec // DON'T WANT THIS
      }
      ],
          
  schemaId=tAq6fq92Qn-6egbHjFFkug==, // DON'T WANT THIS
  kind=admin#directory#schema, // DON'T WANT THIS
  schemaName=Test_Schema_Group133
}

`

注意:每次我运行它的顺序都是不同的,所以我猜想使用某种索引来检索部分输出是行不通的。但我可能错了。

我想得到一个“过滤”的 Logger.log 输出,如下所示: `

{
  displayName=Test Schema Group,
   fields=
     [
      {
       readAccessType=ADMINS_AND_SELF,
       displayName=Test Field1,
       fieldType=BOOL,
       fieldName=Test_Field1,
       multiValued=false,
      },
      {
       multiValued=false,
       fieldName=Test_Field2,
       displayName=Test Field2,
       fieldType=BOOL,
       readAccessType=ADMINS_AND_SELF,
      }
      ],
          
  schemaName=Test_Schema_Group133
}

`

所以,基本上,我希望输出忽略“fieldId”、“kind”和“etag”的值。

此外 - 理想情况下 - 我还希望只选择没有名称的值,例如:“Test Schema Group”而不是“displayName = Test Schema Group”。这样我就可以将这些值推送到 Google 表格,每行都有一个预定义的标题,而无需对其进行过滤(使用 Index 函数)。

如果我了解如何执行此操作,则可以对其进行调整以仅获取任何给定的值。我希望...

在此先感谢您的帮助。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    由于无论如何您都需要亲自挑选您想要的东西,因此您不妨这样做:

    var data = {
      etag: "eObIY8zBQ9kCV0dcsWouNipdJvA0",
      displayName: "Test Schema Group",
      fields: [{
          fieldId: "87mf1ADjQwuyvPaKPIa2uw==",
          readAccessType: "ADMINS_AND_SELF",
          displayName: "Test Field1",
          fieldType: "BOOL",
          fieldName: "Test_Field1",
          etag: "eObIY8zBQ9kCV03CoXVqpKE7PI",
          multiValued: false,
          kind: "admin#directory#schema#fieldspec"
        },
        {
          multiValued: false,
          fieldName: "Test_Field2",
          displayName: "Test Field2",
          etag: "eObIY8zBQ9kCSggLJvV_R8EVdhq8S0O3A",
          fieldType: "BOOL",
          fieldId: "7pRb-wPQQE2cyVvniaJA==",
          readAccessType: "ADMINS_AND_SELF",
          kind: "admin#directory#schema#fieldspec"
        }
      ],
      schemaId: "tAq6fq92Qn-6egbHjFFkug==",
      kind: "admin#directory#schema",
      schemaName: "Test_Schema_Group133"
    }
    var ret = {};
    if(data.schemaName == "Test_Schema_Group133"){
    ret.displayName = data.displayName;
    ret.schemaName = data.schemaName;
    var fields = [];
    for (var f of data.fields) {
      var obj = {};
      obj.readAccessType = f.readAccessType;
      obj.displayName = f.displayName;
      obj.fieldType = f.fieldType;
      obj.fieldName = f.fieldName;
      obj.multiValued = f.multiValued;
      fields.push(obj);
    }
    ret.fields = fields;
    }
    console.log(ret);

    Object.keys()Object.getOwnPropertyNames() 的替代方案。但他们会做基本相同的......

    【讨论】:

    • 嗨@Ricardas,感谢您的回答。我已经测试过了,它给了我完全相同的输出。此外,即使输出不同,这样我也必须手动输入更多数据。或者我错过了什么?
    • 不确定你是如何测试它的,但只要运行 sn-p ,输出就和你想要的一样。在我的示例中,您的最终输出是对象ret。我不确定,我是否理解“手动输入更多数据”的意思。如果您必须从对象中挑选数据,您将始终必须手动定义要挑选的数据。没有通用的解决方法...如果您选择更多数据然后忽略,那么定义必须忽略的内容可能是更优雅的方式...
    • 我通过运行该功能对其进行了测试。关于输入数据的手动部分:计划是使用从 Google 表格单元格中检索的变量(自定义模式的名称)。然后脚本将列出该特定模式的输出。而且,理想情况下,我将只能获得一些值,因为其他值是无关紧要的。
    • 抱歉,我用错误的功能对其进行了测试。我的错。我现在将使用正确的功能再次测试它,并让您知道它的运行情况。
    • 有用。对于那个很抱歉。现在的问题是我是否可以在没有类型的情况下获取值。
    猜你喜欢
    • 2020-08-07
    • 2020-09-15
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多