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

如何实现REST API中JSON对象的字段映射(含嵌套结构)

JSON字段映射:处理嵌套对象的简便方案

我有一个接收JSON数据的REST API,数据字段来自另一记录系统,两者对同一事物的命名规则不同,需要把传入对象的字段映射到数据库存储对象的字段里。

比如传入的源对象是:

{
    "caseId": 9876,
    "userId": 123456
}

需要转换成的目标存储对象是:

{
    "case_id": 9876,
    "user": {
        "id": 123456
    }
}

像caseId这类平级字段的映射很简单,但对于userId这种需要映射到多层嵌套对象的字段,有没有可用的库或者简便技术?理想的方案是支持用类似下面的规则定义映射:

{
    "caseId": "case_id",
    "userId": "user.id"
}

可行方案

1. 用成熟库处理(分语言)

  • JavaScript/TypeScript:可以用lodash的_.set方法配合遍历实现,或者专门的object-path库。这类工具能直接解析user.id这种路径字符串,自动创建嵌套对象并赋值。
  • Java:ModelMapper支持直接配置userId -> user.id这种映射表达式,MapStruct则可以通过自定义转换器或@Mapping注解的expression属性实现嵌套映射。
  • Python:pydantic可以通过模型的model_dump配合字段别名实现,或者用mapper库支持路径式映射规则。

2. 自定义轻量实现(以JS为例)

如果场景简单,不想引入额外依赖,自己写个小函数就能搞定:

function mapFields(source, mappingRules) {
  const target = {};
  for (const [srcKey, targetPath] of Object.entries(mappingRules)) {
    const value = source[srcKey];
    const pathParts = targetPath.split('.');
    let currentNode = target;
    
    pathParts.forEach((part, index) => {
      if (index === pathParts.length - 1) {
        currentNode[part] = value;
      } else {
        currentNode[part] = currentNode[part] || {};
        currentNode = currentNode[part];
      }
    });
  }
  return target;
}

// 调用示例
const sourceData = { caseId: 9876, userId: 123456 };
const rules = { caseId: 'case_id', userId: 'user.id' };
const result = mapFields(sourceData, rules);
console.log(result);
// 输出:{ case_id: 9876, user: { id: 123456 } }

这个函数的核心逻辑是拆分映射规则里的路径字符串,逐层遍历创建嵌套对象,最后把源字段的值赋值到对应位置。如果需要处理数组、空值等边界情况,再针对性加逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:36:26