繁体   English   中英

使用节点 js/ javascript 更改 json 中不同级别的键值

[英]Change value of key at different level in json using node js/ javascript

我正在尝试替换 JSON 文件中的特定值。 假设下面给出的是我的 JSON 数据

样品.json

 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);

所以我想用en替换所有arloc值,我可以替换第一级的值,但是如何更改存在于不同级别的所有loc值。

您可以编写一个简单的递归 function 来处理这个问题。 这会迭代键,如果键的值是 object,它会调用自己。 如果键是loc它会替换它的值。

这是您的示例的jsfiddle

例子:

function replaceLoc(obj){
    for(const key of Object.keys(obj)){
     if (typeof obj[key] === 'object'){
            replaceLoc(obj[key]);
     }
     if (key === 'loc'){
            obj[key] = 'en'
     }
  }
}

replaceLoc(sample);

 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){ for(const key of Object.keys(obj)){ if (typeof obj[key] === 'object'){ replaceLoc(obj[key]); } if (key === 'loc'){ obj[key] = 'en' } } } replaceLoc(sample); console.log(sample);

要搜索和替换嵌套值,您可以使用递归(将您的for...变为 function 并在所有嵌套对象上从其自身内部调用 function)。 编辑:另一个答案显示了如何做到这一点。

您也可以使用正则表达式来做到这一点。 例子:


const regex = /"loc": *"ar"/g
const updatedSample = JSON.stringify(sample).replace(reg, `"loc":"ar"`);

解释:正则表达式找到"loc":"ar":之后有 0 到无限个空格。 JavaScript 然后用你给它的值替换那些。 下面是一个例子,展示了它是如何工作的。

或者,您可以将 JSON object 转换为字符串,并用正则表达式替换所有出现并将它们转换回 JSON

const sampleString = JSON.stringify(sample);
const updatedSample = sampleString.replace(/"loc":"ar"/g, `"loc":"en"`);
const newSample = JSON.parse(updatedSample);
console.log(newSample);

完整示例如下:

 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" } } } }; const sampleString = JSON.stringify(sample); const updatedSample = sampleString.replace(/"loc":"ar"/g, `"loc":"en"`); const newSample = JSON.parse(updatedSample); console.log(newSample);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM