【问题标题】:How to update the attribute value for dynamic JSON file using node.js如何使用 node.js 更新动态 JSON 文件的属性值
【发布时间】:2021-09-03 03:38:17
【问题描述】:

我正在检查 server.json 文件中的 input.json 文件键是否匹配,然后更新 server.json 文件的值。问题是 server.json 文件是动态 json 文件,结构无法预测,它包含 100 个嵌套数组和复杂格式的元素。我只想检查 server.json(动态内容)文件中的 input.json 键是否可用

我有以下带有一些属性和值的 json 输入文件:

input.json:

{"country":"GB","currency":"GBP"}

示例 server.json(动态内容不可预测):

{
    "bank": [    
        {

        "country":"US",
        "currency":"USD"
       
        }
    ]
    
}

输出:

{
    "bank": [    
        {
       
        "country":"GB",
        "currency":"GBP",
      
        }
    ]
    
}

如果键匹配,我只想从 input.json 文件更新上述 server.json 文件值。并且两个(Input.json, and server.json)文件应该有相同的key(国家,货币)。但是问题是server.json中key的索引是未知的,它会是动态内容。

用户可以根据需要更新的键匹配提供 server.json 中可用的任何输入。

尝试以下示例:

async function generateRequestBody(actual, index, functionRef) {
    let callback;
    let payload;
    _globaldeclartion = actual;
    Object.keys(dataset[index]).forEach(function (queueId) {
        if (queueId == functionRef) {
            payload = dataset[index][queueId];
            return;
        }
    });
    payload = await jsonValidator(payload);
    await updateJsonFile(_globaldeclartion, async (data) => {
        Object.keys(data).forEach(async (T) => {
            console.log(T);
            data[T] = payload[T];
        });
        callback = data;
        return data;
    });
    return callback;

如果 input.json 文件键与 server.json(不可预测的 json 结构)文件匹配,我只想更新 server.json。

更新:

有时 server.js 文件将遵循结构化:

 {
           
            "country":"GB",
            "currency":"GBP",
          
   }

有时它可能有更多的嵌套数组。

    {
   "bank":[
      {
         "property":[
            {
               "country":"GB",
               "currency":"GBP"
            }
         ],
        
      }
   ]
}

并且 server.json 结构是不可预测的,我们只需要检查 server.json 中的 input.json 键是否可用,并且需要更改这些值而与结构无关。

更新 - 最新:

async function getIdea(input, data)
{
    var datastring = JSON.stringify(data);
    Object.entries(input).forEach(([key, value]) => {
        console.log(key);
        console.log(value);
        var re = new RegExp(`"${key}":"[^"]*"`, "g");
        console.log(re);
        dataString = datastring.replace(re, `"${key}":"${value}"`);
    });

    console.log(JSON.parse(datastring))
}

getIdea(输入,数据);

Input.json

{
    "country":"GB",
    "currency":"GBP"
}

data.json

{
    "bank": [    
        {
       
        "country":"US",
        "currency":"USD",
       
        }
    ]
}

输出控制台:

country
GB
/"country":"[^"]*"/g 
currency
GBP
/"currency":"[^"]*"/g
{
  bank: [
    {
    
      country: 'US',
      currency: 'USD',
      
    }
  ]
}

【问题讨论】:

    标签: javascript node.js json npm node-modules


    【解决方案1】:

    有很多方法可以做到这一点。

    您可以简单地对需要修改的对象进行字符串化,并通过输入对象的条目,使用正则表达式替换所需的内容。

    var updateProps = function(data, input) {
    
      var dataString = JSON.stringify(data);
    
      // Iterate over all entries in input object
      Object.entries(input).forEach(([key, value]) => {
    
        // matches property value string pair you are looking for 
        // eg.: "country": "US"
        var re = new RegExp(`"${key}":"[^"]*"`, "g");
    
        // replace what with new pair
        dataString = dataString.replace(re, `"${key}":"${value}"`)
        
      });
    
      return JSON.parse(dataString)
    }
    

    现在你只需调用所需对象的函数:

    var input = {
      "country": "GB",
      "currency": "GBP"
    }
    
    var server1 = {
      "bank": [{
        "bankAccountType": "Saving",
        "country": "US",
        "currency": "USD",
        "firstName": "TestFirstName",
        "lastName": "TestLastName",
        "confirmed": "true"
      }]
    }
    
    var server2 = {
      "bankAccountType": "Saving",
      "country": "GB",
      "currency": "GBP",
      "firstName": "TestFirstName",
      "lastName": "TestLastName",
      "confirmed": "true"
    }
    
    
    console.log("Changed object 1: ", fn(server1, input))
    console.log("Changed object 2: ", fn(server2, input))
    /* 
     {...,"country":"US","currency":"USD",...}
      chagnes to:
     {...,"country":"GB","currency":"GBP",...}
    */
    

    【讨论】:

    • 非常感谢您分享这些步骤。让我看看这个……!你节省了我的时间......!!!再次感谢!
    猜你喜欢
    • 2020-10-16
    • 2020-09-08
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多