json - 如何将变量传递到转义的json字符串中?

标签 json powershell azure-devops-rest-api

我试图将json传递到REST api调用中,以便在VSTS上启动构建。

该主体有两个作为转义字符串传递的参数,在调用我的请求之前,我正努力更新这些参数。我的 body 的一个例子如下:

$body ='
{
    "definition":
    {
        "id": ""
    },
    "parameters": "{\"environment\":\"uat\", \"browser\":  \"ie\"}"
}
'

这被传递到以下内容中,在此我可以成功更新定义ID:
$bodyJson=$body | ConvertFrom-Json
$bodyjson.definition.id = $buildDefId
$bodyString=$bodyJson | ConvertTo-Json -Depth 100

这可以成功工作,但是我无法访问json的parameters元素以将浏览器和环境作为变量传递。

您对此有什么建议吗?

我尝试了以下操作但未成功:
$params = $bodyJson.Paramaters
$params -replace "uat","test"
$bodyString=$bodyJson | ConvertTo-Json -Depth 100

这将更新$params中的参数,但在转换时不会将其传递回json。我觉得我已经接近了,但显然错过了一步。

最佳答案

显然,您在另一个Json字符串中嵌入了一个Json(parameters)字符串。
这意味着您必须两次ConvertFrom-Json来反序列化所有内容,并再次两次ConvertTo-Json来使用新参数将其序列化回:
(请注意,我交换了变量名$body$bodyJson,因为$body是一个对象,而$bodyJson实际上是您的Json字符串)

$bodyJson = '
{
    "definition": {
        "id": ""
    },
    "parameters": "{\"environment\":\"uat\", \"browser\":  \"ie\"}"
}
'
$body = $bodyJson | ConvertFrom - Json
$paramJson = $body.parameters
$parameters = $paramJson | ConvertFrom - Json
$parameters

environment browser
----------- -------
uat         ie 

更改参数:
$parameters.environment = "test"

并重建Json字符串:
$paramJson = $parameters | ConvertTo-Json -Compress
$body.parameters = $paramJson
$bodyJson = $body | ConvertTo-Json
$bodyJson
{
    "definition":  {
                       "id":  ""
                   },
    "parameters":  "{\"environment\":\"test\",\"browser\":\"ie\"}"
}

关于json - 如何将变量传递到转义的json字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51247884/

相关文章:

javascript - 根据上下文以不同方式对对象进行字符串化

function - 是否可以在 PowerShell 函数中自动传递开关参数?

java - 如何从 java 更改 cmd 工作目录?

powershell - 获取 AzureRmResourceGroup : The term 'Get-AzureRmResourceGroup' is not recognized as the name of a cmdlet

azure-devops - 使用 REST api 批准 Azure DevOps 中的 yaml 管道部署

azure-devops - 如何从 Azure DevOps Services REST API 获取可用区域路径?

json - 如何在 swift 4 中解析 json 数组中的数组

java - Gson 不能反序列化继承的类?

json - 如何使用 Elm 对集合进行 JSON.Encode?

powershell - 使用Powershell计划Azure DevOps版本