在构建自动化工作流时,你经常会遇到这样的情况:来自不同应用的数据格式不一致。比如,一个系统称呼"名字"为 first_name,而另一个系统称它为 firstName。这时,Rename Keys 节点就派上用场了!
Rename Keys 节点的核心功能是重命名 JSON 对象中的键(字段名)。它能帮你快速将旧的键名转换为新的键名,确保数据在不同系统间流动时保持一致。
逐个指定要重命名的键:
使用正则表达式批量重命名符合模式的键:
⚠️ 重要提示:使用正则表达式时要小心,它会影响所有符合条件的键,包括你已经重命名过的键!
你从一个 API 获取用户数据,格式如下:
{
"first_name": "John",
"last_name": "Doe",
"user_email": "john.doe@example.com",
"phone_number": "+1-555-0123"
}但你的 CRM 系统期望的格式是:
{
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"phone": "+1-555-0123"
}将下面的 JSON 工作流复制,然后在 n8n 中:
{
"name": "用户数据键值转换工作流",
"nodes": [
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "7e2e5be4-91d5-4a49-9d65-59e56cce9b30",
"name": "first_name",
"value": "John",
"type": "string"
},
{
"id": "3d8c9f12-42a3-4b5e-8a2d-71f6c9e2d4b1",
"name": "last_name",
"value": "Doe",
"type": "string"
},
{
"id": "9c1a7f83-5b2c-4e9d-a1f6-82g7d0f3e5c2",
"name": "user_email",
"value": "john.doe@example.com",
"type": "string"
},
{
"id": "4d9b8g94-6c3d-5f0e-b2g7-93h8e1g4f6d3",
"name": "phone_number",
"value": "+1-555-0123",
"type": "string"
}
]
}
},
"type": "n8n-nodes-base.set",
"typeVersion": 2,
"position": [380, 200],
"name": "设置初始数据"
},
{
"parameters": {
"mode": "define",
"toRename": {
"renameOperations": [
{
"currentName": "first_name",
"newName": "firstName"
},
{
"currentName": "last_name",
"newName": "lastName"
},
{
"currentName": "user_email",
"newName": "email"
},
{
"currentName": "phone_number",
"newName": "phone"
}
]
}
},
"type": "n8n-nodes-base.renameKeys",
"typeVersion": 1,
"position": [680, 200],
"name": "重命名键"
},
{
"parameters": {},
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [980, 200],
"name": "查看结果"
}
],
"connections": {
"设置初始数据": {
"main": [
[
{
"node": "重命名键",
"type": "main",
"index": 0
}
]
]
},
"重命名键": {
"main": [
[
{
"node": "查看结果",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {}
}第一步:设置初始数据
第二步:重命名键
first_name → firstNamelast_name → lastNameuser_email → emailphone_number → phone第三步:查看结果
运行此工作流后,你会看到数据被成功转换:
输入(来自第一个节点):
[
{
"first_name": "John",
"last_name": "Doe",
"user_email": "john.doe@example.com",
"phone_number": "+1-555-0123"
}
]输出(来自 Rename Keys 节点):
[
{
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"phone": "+1-555-0123"
}
]从多个 API 获取数据时,每个 API 的字段命名都不同。使用 Rename Keys 将它们统一为你的内部标准。
示例:
customer_first_name → 转换为 → firstNamebilling_first_name → 转换为 → firstName不同的系统有不同的数据字段要求。在导入前重命名键,避免数据映射出错。
示例:
staff_idemployee_idstaff_id → employee_id在 snake_case(下划线命名)和 camelCase(驼峰命名)之间快速转换。
示例:
created_at, updated_at, user_statuscreatedAt, updatedAt, userStatus如果你需要一次性重命名许多遵循相同模式的键,正则表达式会非常高效。
示例:将所有下划线命名转为驼峰命名
_(.)$1(需要 JavaScript 支持)user_name → userName⚠️ 提示:在使用正则表达式前,先在标准模式中测试你的用例,确保你完全理解其行为。
✅ DO(应该做)
❌ DON'T(不应该做)
| 参数 | 说明 | 示例 |
|---|---|---|
| 当前键名 | 原始的键名 | user_email |
| 新键名 | 重命名后的键名 | email |
| 正则表达式 | 匹配多个键的表达式 | _ |
| 替换为 | 新名称的替换模式 | 空值或特定前缀 |
| 区分大小写 | 是否区分大小写 | ON/OFF |
| 最大深度 | 重命名的嵌套层级 | -1(无限)/ 0(仅顶层) |
Q: Rename Keys 可以处理嵌套的 JSON 对象吗?
A: 可以!通过设置正确的最大深度参数,你可以深入到嵌套对象中重命名键。
Q: 如果我有 100 个字段需要重命名怎么办?
A: 使用正则表达式模式会更高效。或者考虑使用 Function 节点来编写自定义 JavaScript 脚本。
Q: 重命名后能不能保留原始字段?
A: Rename Keys 只重命名,不保留原始字段。如果需要保留,先使用 Duplicate 节点或手动在 Set 节点中复制字段。
Q: 在数组处理中如何使用 Rename Keys?
A: 需要结合 Split Out(分割)和 Loop 节点,或者在 Map 节点中使用。
[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.renamekeys/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#