从复杂的嵌套数组中提取值

Extract values from complex nested arrays

提问人:TheIronKing 提问时间:8/23/2023 最后编辑:TheIronKing 更新时间:8/23/2023 访问量:40

问:

我在节点中使用强肥皂来提取Netsuite中保存的搜索。 我已经取得了一些成功,但现在我在节点中拥有提取值所需的信息。

如果我对搜索查询的结果使用 util.inspect,那么我会得到搜索中所有信息的详细细分。

如果我只使用 console.log 打印结果,那么我会得到以下结果。

我需要的信息在 entityId 和 customFieldList 对象中。

如何访问这些对象?

[
  {
    '$attributes': { '$xsiType': [Object] },
    basic: { entityId: [Object], customFieldList: [Object] }
  },
  {
    '$attributes': { '$xsiType': [Object] },
    basic: { entityId: [Object], customFieldList: [Object] }
  },
  {
    '$attributes': { '$xsiType': [Object] },
    basic: { entityId: [Object], customFieldList: [Object] }
  },
  {
    '$attributes': { '$xsiType': [Object] },
    basic: { entityId: [Object], customFieldList: [Object] }
  },
  {
    '$attributes': { '$xsiType': [Object] },
    basic: { entityId: [Object], customFieldList: [Object] }
  },
  {
    '$attributes': { '$xsiType': [Object] },
    basic: { entityId: [Object], customFieldList: [Object] }
  }
]

感谢您到目前为止的帮助。

当我使用 util.inspect 时,上述每个部分都会像下面这样分解。我有星号表示敏感信息,但本质上我需要的值是 entityId 和 customField 的 searchValue。

{
  status: { '$attributes': { isSuccess: 'true' } },
  totalRecords: 6,
  pageSize: 1000,
  totalPages: 1,
  pageIndex: 1,
  searchId: '****************************************************************',
  searchRowList: {
    searchRow: [
      {
        '$attributes': {
          '$xsiType': {
            type: 'EmployeeSearchRow',
            xmlns: 'urn:employees_2022_2.lists.webservices.netsuite.com'
          }
        },
        basic: {
          entityId: { searchValue: '*****' },
          customFieldList: {
            customField: [
              {
                '$attributes': {
                  internalId: '****',
                  scriptId: 'custentity_revenuetoday_stored',
                  '$xsiType': {
                    type: 'SearchColumnDoubleCustomField',
                    xmlns: 'urn:core_2022_2.platform.webservices.netsuite.com'
                  }
                },
                searchValue: '*****'
              },
              {
                '$attributes': {
                  internalId: '****',
                  scriptId: 'custentity_wallboard_yn',
                  '$xsiType': {
                    type: 'SearchColumnBooleanCustomField',
                    xmlns: 'urn:core_2022_2.platform.webservices.netsuite.com'
                  }
                },
                searchValue: 'true'
              }
            ]
          }
        }
      },

塞巴斯蒂安(Sebastian)在下面的回答是如果您遇到同样的问题,则需要什么。我用他的代码是:

          const searchRows = result.searchResult.searchRowList.searchRow;
          searchRows.forEach((row) => {
             const searchValue = row.basic.entityId.searchValue;
             const customField = row.basic.customFieldList.customField.searchValue;
             console.log(searchValue);
             console.log(customField);
          });
JavaScript 节点 .js 数组 对象 SOAP

评论

1赞 GrafiCode 8/23/2023
它是一个对象数组,所以,像这样? 和objArray[index].basic.entityIdobjArray[index].basic.customFieldList
1赞 Matt Morgan 8/23/2023
这回答了你的问题吗?如何访问和处理嵌套对象、数组或 JSON?
0赞 TheIronKing 8/23/2023
嗨,马特,谢谢你,信不信由你,我花了大半个上午的时间阅读了那篇非常详细的回复,并尝试了“访问嵌套数据部分”和“如果我事先不知道结构该怎么办”中的技术,可悲的是没有喜悦。Matt,Grafi,我将根据 util.inspect 发布上述对象的细分,这可能会有所帮助。感谢您抽出宝贵时间,感谢您的帮助。给我几分钟时间清理数据。

答:

1赞 Sebastian Kaczmarek 8/23/2023 #1

如果这是结果对象,则可以访问如下所示的单个值:

const query = {
  status: { '$attributes': { isSuccess: 'true' } },
  totalRecords: 6,
  pageSize: 1000,
  totalPages: 1,
  pageIndex: 1,
  searchId: '****************************************************************',
  searchRowList: {
    searchRow: [
      {
        '$attributes': {
          '$xsiType': {
            type: 'EmployeeSearchRow',
            xmlns: 'urn:employees_2022_2.lists.webservices.netsuite.com'
          }
        },
        basic: {
          entityId: { searchValue: '*****' },
          customFieldList: {
            customField: [
              {
                '$attributes': {
                  internalId: '****',
                  scriptId: 'custentity_revenuetoday_stored',
                  '$xsiType': {
                    type: 'SearchColumnDoubleCustomField',
                    xmlns: 'urn:core_2022_2.platform.webservices.netsuite.com'
                  }
                },
                searchValue: '*****'
              },
              {
                '$attributes': {
                  internalId: '****',
                  scriptId: 'custentity_wallboard_yn',
                  '$xsiType': {
                    type: 'SearchColumnBooleanCustomField',
                    xmlns: 'urn:core_2022_2.platform.webservices.netsuite.com'
                  }
                },
                searchValue: 'true'
              }
            ]
          }
        }
      },
      // ... more results
    ]
  }
};

const searchValue = query.searchRowList.searchRow[0].basic.entityId.searchValue;
const customField = query.searchRowList.searchRow[0].basic.customFieldList.customField;

console.log(searchValue);
console.log(customField);

请注意,我对索引进行了硬编码以访问第一个结果的值。如果要访问所有值,可以循环访问它们:0

const query = {
  status: { '$attributes': { isSuccess: 'true' } },
  totalRecords: 6,
  pageSize: 1000,
  totalPages: 1,
  pageIndex: 1,
  searchId: '****************************************************************',
  searchRowList: {
    searchRow: [
      {
        '$attributes': {
          '$xsiType': {
            type: 'EmployeeSearchRow',
            xmlns: 'urn:employees_2022_2.lists.webservices.netsuite.com'
          }
        },
        basic: {
          entityId: { searchValue: '*****' },
          customFieldList: {
            customField: [
              {
                '$attributes': {
                  internalId: '****',
                  scriptId: 'custentity_revenuetoday_stored',
                  '$xsiType': {
                    type: 'SearchColumnDoubleCustomField',
                    xmlns: 'urn:core_2022_2.platform.webservices.netsuite.com'
                  }
                },
                searchValue: '*****'
              },
              {
                '$attributes': {
                  internalId: '****',
                  scriptId: 'custentity_wallboard_yn',
                  '$xsiType': {
                    type: 'SearchColumnBooleanCustomField',
                    xmlns: 'urn:core_2022_2.platform.webservices.netsuite.com'
                  }
                },
                searchValue: 'true'
              }
            ]
          }
        }
      },
      // ... more results
    ]
  }
};

const searchRows = query.searchRowList.searchRow;
searchRows.forEach((row) => {
  const searchValue = row.basic.entityId.searchValue;
  const customField = row.basic.customFieldList.customField;

  console.log(searchValue);
  console.log(customField);
});

评论

0赞 TheIronKing 8/23/2023
塞巴斯蒂安,谢谢你。你是个天才。我没有使用确切的代码,因为我不需要查询部分,但本质上,这正是它。谢谢。