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

如何在Node.js/TypeScript中从JSONPath查询串与值构建JSON对象

在Node.js/TypeScript中通过JSONPath生成JSON对象

我们需要将给定的JSONPath键值对转换为完整的JSON对象,以下是具体实现思路和代码:

输入与期望输出

给定输入

$.student.firstName = "Abc"
$.student.subject['physics'].mark=100 

期望生成的JSON对象

{
  "student":{
    "firstName": "Abc",
    "physics":{
      "mark":100
    }
  }
}

实现步骤(对应Java思路的Node.js/TypeScript版本)

1. 解析JSONPath,拆分路径节点

先处理JSONPath字符串,提取出层级节点数组:

  • 去掉开头的$符号
  • 将.作为分隔符拆分路径,同时处理['xxx']格式的节点,提取其中的键名,统一成可拆分的格式

2. 逐步构建嵌套对象

从空的根对象开始,遍历路径节点数组,依次创建每个层级的对象属性,遍历到最后一个节点时,为其赋值对应的值。

3. 输出最终JSON对象

构建完成后直接得到目标对象,如需JSON字符串,可使用JSON.stringify进行转换。

具体代码实现

function buildJsonFromPaths(pathEntries: Array<{ path: string; value: any }>): object {
  const result: Record<string, any> = {};

  pathEntries.forEach(({ path, value }) => {
    // 清理JSONPath格式
    let cleanedPath = path.replace(/^\$\./, ''); // 移除开头的$.
    // 将['xxx']格式转换为.xxx,统一拆分规则
    cleanedPath = cleanedPath.replace(/\['([^']+)'\]/g, '.$1');
    const nodes = cleanedPath.split('.');

    let current = result;
    // 遍历路径节点(除最后一个),创建嵌套结构
    for (let i = 0; i < nodes.length - 1; i++) {
      const node = nodes[i];
      if (!current[node]) {
        current[node] = {};
      }
      current = current[node];
    }
    // 为最后一个节点赋值
    current[nodes[nodes.length - 1]] = value;
  });

  return result;
}

// 测试示例
const inputEntries = [
  { path: "$.student.firstName", value: "Abc" },
  { path: "$.student.subject['physics'].mark", value: 100 }
];

const jsonObject = buildJsonFromPaths(inputEntries);
console.log(JSON.stringify(jsonObject, null, 2));

运行上述代码后,即可得到期望的JSON对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:32:43