Javascript 检查对象并对所有匹配的子节点执行修改

Javascript 检查对象并对所有匹配的子节点执行修改,javascript,postman,newman,Javascript,Postman,Newman,我正在处理一个大型JSON配置文件(顺便说一句,是Postman/Newman API请求的集合),在节点应用程序中运行它之前,需要对其进行一些修改 示例配置 所需步骤 1) 在config中搜索以查找包含键的所有子项:“filerename” 2) 对于每个匹配的子级,修改其键和值,如下所示: // Original object { "key": "filerename", "value": "./tests/fixtures/anotherphoto.png", "type":

我正在处理一个大型JSON配置文件(顺便说一句,是Postman/Newman API请求的集合),在节点应用程序中运行它之前,需要对其进行一些修改

示例配置 所需步骤 1) 在
config
中搜索以查找包含
键的所有子项:“filerename”

2) 对于每个匹配的子级,修改其键和值,如下所示:

// Original object
{
  "key": "filerename",
  "value": "./tests/fixtures/anotherphoto.png",
  "type": "text"
}

// Updated object
{
  "key": "file",                               // change the value from "filerename" to "file"
  "src": "./tests/fixtures/anotherphoto.png",  // change the key from "value" to "src"
  "type": "file"                               // change the value from "text" to "file"
}
3) 完成后,返回整个修改的对象

笔记
  • 主对象中可能有许多匹配的子对象。所有这些都需要处理
  • 对象可以有无限级别的嵌套,因此函数应该适应这一点
  • 函数应该返回一个修改过的对象,然后可以在其他地方使用
  • 我将此脚本作为ES6节点应用程序的一部分运行,因此可以充分利用

我希望避免将JSON字符串化,然后在其上运行Regex替换,因为我认为这在未来将不太通用。但这似乎是目前最简单的方法:

function replaceFilePaths(input) {
    let modified = JSON.stringify(input);
    modified = modifiedCollection.replace(/{\"key\":\"filekey\[(.*?)\]\",\"value\":\"(.*?)\",\"type\":\"text\"}/mg, '{"key":"\$1","src":"\$2","type": "file"}')
    return JSON.parse(modified);
}

我还做了一个调整,允许传入一个键名,比如
filekey[file\u url]
,并将其转换为
“key”:“file\u url”

您只是在JSON文件中查找和替换文本吗?您不能使用sublime、VSCode等文本编辑器吗?@DannyDainton遗憾的是,不能使用,因为请求集(大约有400个)会定期更新并导出为JSON。然后,该脚本需要处理该JSON文件,并在CLI上运行Newman之前进行必要的调整。上面的示例是真实配置的大幅简化版本;)出口是什么?它不能在该阶段之前而不是之后处理吗?不幸的是,不能-生成应用程序(Postman)中存在一些限制,这意味着我们必须在导出后通过脚本进行修改。
function replaceFilePaths(input) {
    let modified = JSON.stringify(input);
    modified = modifiedCollection.replace(/{\"key\":\"filekey\[(.*?)\]\",\"value\":\"(.*?)\",\"type\":\"text\"}/mg, '{"key":"\$1","src":"\$2","type": "file"}')
    return JSON.parse(modified);
}