You need to enable JavaScript to run this app. 如何通过指定键获取UUID动态变化的嵌套JSON对应路径
优惠活动
大模型
产品
解决方案
定价
更多

如何通过指定键获取UUID动态变化的嵌套JSON对应路径

动态UUID场景下的目标键路径查找实现方案

核心痛点为children节点下的UUID为随机动态值,无法硬编码固定路径,可行方案核心为递归遍历JSON全节点,匹配目标键名时实时拼接当前遍历到的路径段,完全消除对动态键值的硬编码依赖。

实现逻辑

  • 从JSON根节点开始逐层级扫描,遇到对象类型时遍历其所有键值对
  • 每深入一层就将当前键名追加到临时路径数组中,遇到数组类型则按对应索引记录路径段(格式如streams[0])
  • 匹配到目标键名时,将累积的路径段拼接为标准JSON路径格式直接返回
  • 全程不预设动态UUID的具体值,扫描过程中自动将实际遇到的UUID值补入最终路径

可直接运行的实现代码

/**
 * 递归查找指定键名的JSON完整路径
 * @param {any} sourceObj 待遍历的源JSON对象
 * @param {string} targetKey 需要定位的目标键名
 * @param {array} pathBuffer 递归过程中累积的路径段(内部参数)
 * @returns {string|null} 匹配到的完整JSON路径,未找到则返回null
 */
function locateTargetKeyPath(sourceObj, targetKey, pathBuffer = []) {
  // 非可遍历对象类型直接终止递归
  if (typeof sourceObj !== 'object' || sourceObj === null) return null;

  // 数组节点按索引逐元素遍历
  if (Array.isArray(sourceObj)) {
    for (let idx = 0; idx < sourceObj.length; idx++) {
      const matchRes = locateTargetKeyPath(sourceObj[idx], targetKey, [...pathBuffer, `[${idx}]`]);
      if (matchRes) return matchRes;
    }
    return null;
  }

  // 对象节点按键名逐字段遍历
  for (const currentKey in sourceObj) {
    const updatedPath = [...pathBuffer, currentKey];
    // 命中目标键时直接拼接路径返回
    if (currentKey === targetKey) {
      return updatedPath.join('.').replace(/\.\[/g, '[');
    }
    // 未命中则递归深入当前键对应的子节点
    const matchRes = locateTargetKeyPath(sourceObj[currentKey], targetKey, updatedPath);
    if (matchRes) return matchRes;
  }
  return null;
}

// 针对示例结构的调用测试
const inventoryPath = locateTargetKeyPath(ourObject, 'myInventory');
// 实际返回路径:payload.streams[0].children.2165d20a-6276-468f-a02f-1abd65cad618.additionalInformation.myInventory

方案优势

  • 对动态变化的UUID类键名完全无感知,无论UUID值如何生成,都能自动匹配并生成对应路径
  • 支持任意深度的嵌套对象、数组结构扫描,不会因结构层级变化导致查找失效
  • 返回的标准路径可直接配合lodash.get、原生JSON取值逻辑读取对应节点值,无需二次加工

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 20:36:00