AI编程助手
AI免费问答

使用 Node.js 动态替换 JSON 对象中的键值对

碧海醫心   2025-08-15 19:32   989浏览 原创

使用 node.js 动态替换 json 对象中的键值对

本文介绍如何使用 Node.js 处理 JSON 数据,查找特定键(例如包含 "RBS" 值的 "Label_Field_ID_" 键),并根据该键的 ID,将对应 "User_Answer_Field_ID_" 键的值替换到新的 "RBS" 键中。通过提供的示例代码,你可以学习如何使用 Object.entries()、字符串处理和对象解构等技术,高效地完成此类数据转换任务。

查找并替换 JSON 对象中的键值

在处理 JSON 数据时,有时需要根据特定的条件查找键,并将其对应的值移动到新的键中。以下示例展示了如何使用 Node.js 实现这一目标。

示例数据

假设我们有以下 JSON 数据:

[
  {
    "Author": "rps",
    "Label_Field_ID_1117189": "RBS",
    "User_Answer_Field_ID_1117189": "4532019166",
    "status": "In Bearbeitung"
  },
  {
    "Author": "sps",
    "Label_Field_ID_1117230": "RBS",
    "User_Answer_Field_ID_1117230": "4232019179"
  }
]

我们的目标是找到所有以 "Label_Field_ID_" 开头且值为 "RBS" 的键,然后将与该键具有相同数字后缀的 "User_Answer_Field_ID_" 键的值,移动到新的键 "RBS" 中,并删除原 "User_Answer_Field_ID_" 键。

实现步骤

  1. 定义一个处理函数: 创建一个名为 updateAnswerFields 的函数,该函数接收一个 JSON 对象作为参数。

  2. 查找目标键: 使用 Object.entries() 方法将对象转换为键值对数组,然后使用 find() 方法查找以 "Label_Field_ID_" 开头的键,并提取其对应的值。

  3. 构建目标键名: 从找到的 "Label_Field_ID_" 键名中提取数字后缀,并使用该后缀构建对应的 "User_Answer_Field_ID_" 键名。

  4. 提取值并创建新键: 使用对象解构来提取 "User_Answer_Field_ID_*" 键的值,并将其赋给新的 "RBS" 键。

  5. 返回修改后的对象: 返回包含新 "RBS" 键的对象,同时删除原 "User_Answer_Field_ID_*" 键。

示例代码

const input = [
  {
    "Author": "rps",
    "Label_Field_ID_1117189": "RBS",
    "User_Answer_Field_ID_1117189": "4532019166",
    "status": "In Bearbeitung"
  },
  {
    "Author": "sps",
    "Label_Field_ID_1117230": "RBS",
    "User_Answer_Field_ID_1117230": "4232019179"
  }
];

function updateAnswerFields(obj) {
  const [label, value] = Object.entries(obj).find(([key, value]) =>
    key.startsWith("Label_Field_ID_")
  );
  const answerKey =
    "User_Answer_Field_ID_" + label.split("_").slice(-1)[0];
  const { [answerKey]: a, ...rest } = obj;
  rest[value] = obj[answerKey];
  return rest;
}

console.log(input.map(updateAnswerFields));

代码解释

  • Object.entries(obj): 将对象 obj 转换为键值对数组。
  • find(([key, value]) => key.startsWith("Label_Field_ID_")): 查找以 "Label_Field_ID_" 开头的键值对。
  • label.split("_").slice(-1)[0]: 从键名中提取数字后缀。
  • const { [answerKey]: a, ...rest } = obj;: 使用对象解构提取 answerKey 对应的值,并将剩余的键值对放入 rest 对象中。
  • rest[value] = obj[answerKey];: 将 answerKey 对应的值赋给 value 键(即 "RBS" 键)。
  • input.map(updateAnswerFields): 对 input 数组中的每个对象应用 updateAnswerFields 函数。

注意事项

  • 确保 JSON 数据的结构符合预期,即 "Label_Field_ID_" 和 "User_Answer_Field_ID_" 键存在且具有正确的格式。
  • 如果 "Label_Field_ID_*" 键的值不是 "RBS",则代码仍然会执行,但可能不会产生预期的结果。 可以添加条件判断语句来处理这种情况。

总结

通过使用 Object.entries()、字符串处理和对象解构等技术,我们可以高效地处理 JSON 数据,并根据特定的条件查找和替换键值对。这种方法在数据转换和清洗等场景中非常有用。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。