Я работаю с большим конфигурационным файлом 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) После завершения верните весь измененный объект.
Я хотел избежать наложения 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_url]
и превратить это в "key": "file_url"
.