检查对象并在所有匹配的子节点上进行修改

时间:2018-10-16 12:27:03

标签: javascript postman newman

我正在使用一个大型JSON配置文件(顺便说一句,是Postman / Newman API请求的集合),并且需要对此进行一些修改,然后才能在Node应用程序中运行它。

样品配置

let config = {
  "name": "API Requests",
  "item": [
    {
      "name": "Upload Data File",
      "body": {
        "formdata": [
          {
            "key": "filerename",
            "value": "./tests/fixtures/data.txt",
            "type": "text"
          }
        ]
      }
    },
    {
      "name": "Another Group",
      "item": [
        {
          "name": "Upload Profile Photo",
          "body": {
            "formdata": [
              {
                "key": "filerename",
                "value": "./tests/fixtures/profilephoto.png",
                "type": "text"
              },
              {
                "key": "anotherkey",
                "value": "1",
                "type": "text"
              }
            ]
          }
        }
      ]
    }
  ]
}

function updateFormdataObjects(config) {
  let updatedConfig;
  // Process the object here and rewrite each of the formdata entries as described below
  return updatedConfig;
}

所需步骤

1)在config内搜索以查找包含"key": "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的Node应用程序的一部分运行,因此可以充分利用

1 个答案:

答案 0 :(得分:1)

我想避免对JSON进行字符串化处理,然后再对它进行正则表达式替换,因为我认为这在将来会变得不那么通用。但这似乎是目前最简单的方法:

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_url]之类的密钥名称并将其转换为"key": "file_url"来对密钥名称进行更多配置。