You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google App Script判断JSON是否存在externalIds字段并取值的方案

原有代码失效原因

逻辑不生效是以下几个明确问题导致的:

  • 判断条件语法错误:json["externalIds"].ContenService ="null" 中单等号是赋值操作而非相等比较,且不存在ContenService属性,同时将null类型误写为字符串"null",判断逻辑完全不成立
  • 缺失前置存在性校验:当用户数据无externalIds字段时,json["externalIds"]值为undefined,直接访问其属性会抛出类型错误,导致代码中断
  • 取值逻辑不可靠:默认取externalIds[0]没有校验条目类型,若数组首项不是type=organization的条目,会取到错误值
  • 冗余解析问题:如果是通过Google内置Admin SDK接口拉取的用户列表,返回值本身就是JS对象,不需要额外调用JSON.parse,重复解析可能触发异常
修正后兼容代码
for(var i = 0; i < users.length; i++){
  const user = users[i];
  // 初始化默认空值,所有不匹配场景都返回空
  let empolyee_code = "";

  // 第一层校验:确认externalIds存在且是有效数组
  if (Array.isArray(user.externalIds)) {
    // 遍历匹配type为organization的条目,不依赖数组顺序
    const orgIdEntry = user.externalIds.find(item => item.type === "organization");
    // 低版本环境不支持?.的话,替换为 orgIdEntry && orgIdEntry.value 即可
    if (orgIdEntry?.value) {
      empolyee_code = orgIdEntry.value;
      Logger.log("empolyee_code " + empolyee_code);
    } else {
      Logger.log("No matching organization ID found");
    }
  } else {
    Logger.log("No empolyee_code " + empolyee_code);
  }

  rows.push([
    user.name.givenName, 
    user.name.familyName, 
    user.primaryEmail,
    getUserOrg(user.primaryEmail, user.orgUnitPath),
    getStatus(user.suspended),
    user.lastLoginTime.slice(0,10),
    empolyee_code
  ]);        
}
逻辑说明
  • 用Array.isArray()做第一层校验,覆盖无externalIds字段、字段值非数组的异常场景,从根源避免类型错误
  • 用数组find()方法精准匹配type=organization的条目,不依赖数组固定顺序,避免取错其他类型的外部ID
  • 员工编号初始化为空字符串,所有不满足匹配条件的场景都使用默认值,不会中断整个循环执行
  • 移除冗余的JSON解析、重复日志打印逻辑,直接操作用户对象即可

内容的提问来源于stack exchange,提问作者bonk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:42:26