如何使用Node js更改JSON中多次重复的特定键的值

  • 本文关键字:Node 何使用 js 更改 JSON json
  • 更新时间 :
  • 英文 :


我试图构建一个函数,该函数将根据作为输入参数给出的路径用户替换值。我有一个复杂的JSON与一些重复的键和用户将给出元素的路径,并基于该路径,它需要替换特定键的值(这可能是重复的):

SampleJSON.json:

{
"product": "delivery",
"Merchant": {
"payment_method": "GPay"
},
"transactions": [
{
"amount": {
"total": "100",
"currency": "USD",
"details": {
"subtotal": "100",
"tax": "1",
"insurance": "0.1"
}
},
"description": "The payment transaction description",
"custom": "JACKSON DISPUTERS SYSTEMS",
"invoicenumber": "",
"descriptor": "null",
"itemlist": {
"items": [
{
"name": "COMPUTER",
"description": "BLACK",
"quantity": "1",
"price": "100",
"tax": "1",
"currency": "USD"
}
],
"shippingaddress": {
"recipient_name": "JACKSON DISPUTERS SYSTEMS",
"line1": "XXXX",
"line2": "XXXX",
"city": "XXXX",
"country_code": "XX",
"postal_code": "XXXX",
"phone": "XXXXXX",
"state": "XXXXXX"
}
}
}
],
"note_to_payer": "Contact us for any questions on your order."
}

用户输入:

arg1: product.transactions.currency,
arg2: EUR

我只需要遍历上面的路径(arg1)并将货币的值替换为AUD (arg2)。

如果你注意到货币元素在给定的JSON文件中的两个不同的地方可用,但我只是想替换arg1中提到的交易数组下的货币,而不是另一个。

到目前为止,我刚刚创建了下面的代码,它将遍历给定JSON中的每个元素,但不确定如何替换给定键(arg1)的值。

const arg1 = "product.transactions.currency";
const condition = arg1.toString().split(".");
const arg2 = "EUR";
const cond = false;
function process(key,value) {
if(key === condition[condition.length-1]) //condition[condition.length-1] return currency
{
cond = true;
console.log(key + " : "+value);
}
}

function traverse(o,func) {
for (var i in o) {
func.apply(this,[i,o[i]]);  
if (o[i] !== null && typeof(o[i])=="object") {
if(cond === false)
{
traverse(o[i],func);
}
}
}
}

traverse(SampleJSON, process);

以上代码打印第一次出现的"Currency"元素,但我只是想打印基于arg1的元素,这是由用户给出的,并希望替换基于arg2的值。

是否有任何可用的NPM包来实现这一点?

任何帮助都将是非常感激的。

可以使用Lodashset方法在对象的特定路径上赋值。首先,运行下面的命令来安装包:

yarn install lodash.set

使用

const set = require('lodash.set');
set(yourObject, 'product.transactions.currency', 'EUR');

最新更新