изменить ключевую часть JSON с помощью PowerShell - PullRequest
0 голосов
/ 22 октября 2019

Используя Powershell, как мне изменить "/ api / v1 / user / answers" под путями для json ?. Я хотел бы заменить его на другое значение, например /abc/v1/xyz/Answers.

{
    "version": "2.0",
    "host": "worktest.com",
    "paths": {
        "/api/v1/user/Answers": {...},
        "/api/v1/user/Assignments/GetUserAssignmentDetails": {...},
        "/user/Assignments/GetStatus": {...},
        "/Grades/GetGradesByProduct": {...}
    },
}

$content = Get-Content 'd:\temp\test.json'| ConvertFrom-Json

$content.paths.'/api/v1/user/Answers' # not sure where to go from here

1 Ответ

1 голос
/ 22 октября 2019

Я использовал следующий JSON:

{
    "version": "2.0",
    "host": "worktest.com",
    "paths": {
        "/api/v1/user/Answers": {
          "answer1": "something",
          "answer2": "something else"  
        },
        "/api/v1/user/Assignments/GetUserAssignmentDetails": "value",
        "/user/Assignments/GetStatus": "value",
        "/Grades/GetGradesByProduct": "value"
    }
}

Следующий код копирует значение ключа во вновь созданный и затем удаляет старый ключ:

$content = Get-Content 'test.json'| ConvertFrom-Json
# Which key to replace
$pathToBeReplaced = '/api/v1/user/Answers'
# Construct new key
$newPath = $pathToBeReplaced -replace '^/api','/abc'

# Create new property with proper value
$content.paths | Add-Member -Type NoteProperty -Name $newPath -Value $content.paths."$pathToBeReplaced"
# Remove old key
$content.paths.PSObject.Properties.Remove($pathToBeReplaced)

Теперь давайтесмотрите вывод:

# Getting output
PS> $content.paths |fl

/api/v1/user/Assignments/GetUserAssignmentDetails : value
/user/Assignments/GetStatus                       : value
/Grades/GetGradesByProduct                        : value
/abc/v1/user/Answers                              : @{answer1=something; answer2=something else}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...