通过数组解析 JSON 字符串位置的技巧

用路径数组精准定位复杂 JSON 的任意字段。

为什么要用数组路径解析?

当 JSON 层级很深、字段名可能有特殊字符或动态变化时,直接使用 obj.a.b.c 这种点语法会显得脆弱。用一个路径数组,如 ["a", "b", 0, "c"] 来逐步下钻,就更通用、可迭代处理。

示例代码

// 假设 jsonStr 是后端返回的 JSON 字符串
const jsonStr = '{"a":{"b":[{"c":42}]}}';
const data = JSON.parse(jsonStr);

// 路径数组
const path = ["a", "b", 0, "c"];

function getByPath(obj, pathArr) {
  return pathArr.reduce((acc, key) => (acc != null ? acc[key] : undefined), obj);
}

console.log(getByPath(data, path)); // 42

定位位置并修改

function setByPath(obj, pathArr, value) {
  return pathArr.reduce((acc, key, idx) => {
    if (idx === pathArr.length - 1) {
      acc[key] = value;
    } else {
      // 若不存在则根据下一步 key 类型自动创建对象或数组
      if (acc[key] == null) {
        acc[key] = typeof pathArr[idx + 1] === 'number' ? [] : {};
      }
    }
    return acc[key];
  }, obj);
}

setByPath(data, path, 100);
console.log(data.a.b[0].c); // 100

更复杂的场景

如果你还需要将路径映射回原始字符串的字符位置,可以在解析阶段使用自定义解析器或 AST 工具来记录 token 的起止位置。

← 返回首页