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

如何在Node.js/JavaScript中修改JSON不同层级的loc字段值

替换JSON所有层级中指定字段的值

问题描述

需要将JSON对象中所有层级里值为"ar"的loc字段替换为"en",当前代码仅能修改第一层的loc值,无法处理嵌套对象和数组中的对应字段。

原始代码示例:

let sample={
  "yuiwedw":{
  "id":"yuiwedw",
  "loc": "ar",
  "body":{
    "data":"we got this",
    "loc":"ar",
    "system":{
      "fname":"admin",
      "lname":"admin",
      "details":[
       {
        "id":"Admin_01",
        "loc":"ar"
       },
       {
        "id":"Admin_02",
        "loc":"ar"
       }
       ]
      }
    }
  },
    "hbjds324":{
  "id":"hbjds324",
  "loc": "ar",
  "body":{
    "data":"testing",
    "loc":"ar",
    "system":{
      "fname":"public",
      "lname":"servent",
      "details":[
       {
        "id":"public_01",
        "loc":"ar"
       }
       ],
       "Available":true,
       "loc":"ar"
      }
    }
  }
}

for (const value of Object.values(sample)) {
  value.loc = "en";
}

console.log(sample);

解决方案:使用递归遍历所有层级

要处理嵌套的对象和数组,需要编写递归函数遍历每一个元素:

  • 若为对象,先检查是否存在loc字段且值为"ar",是则替换;再递归处理对象的每一个属性值。
  • 若为数组,遍历数组内每一个元素,递归处理每个元素。

修改后的代码:

let sample={
  "yuiwedw":{
  "id":"yuiwedw",
  "loc": "ar",
  "body":{
    "data":"we got this",
    "loc":"ar",
    "system":{
      "fname":"admin",
      "lname":"admin",
      "details":[
       {
        "id":"Admin_01",
        "loc":"ar"
       },
       {
        "id":"Admin_02",
        "loc":"ar"
       }
       ]
      }
    }
  },
    "hbjds324":{
  "id":"hbjds324",
  "loc": "ar",
  "body":{
    "data":"testing",
    "loc":"ar",
    "system":{
      "fname":"public",
      "lname":"servent",
      "details":[
       {
        "id":"public_01",
        "loc":"ar"
       }
       ],
       "Available":true,
       "loc":"ar"
      }
    }
  }
}

function replaceLoc(obj) {
  // 处理对象类型
  if (typeof obj === 'object' && obj !== null) {
    if (obj.loc === 'ar') {
      obj.loc = 'en';
    }
    // 遍历对象所有属性
    for (const key in obj) {
      if (obj.hasOwnProperty(key)) {
        replaceLoc(obj[key]);
      }
    }
  }
  // 处理数组类型
  else if (Array.isArray(obj)) {
    obj.forEach(item => replaceLoc(item));
  }
}

// 调用函数处理整个对象
replaceLoc(sample);
console.log(sample);

代码说明

  • replaceLoc函数会递归遍历传入的对象或数组:
    • 遇到对象时,先检查并替换当前对象的loc字段,再递归处理每个属性值。
    • 遇到数组时,遍历每一项并递归调用自身处理。
  • 这种方式能覆盖所有嵌套层级,确保所有值为"ar"的loc字段都被替换为"en"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:35:23