Powershell ConvertTo-Json с коллекцией ценностей - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь создать следующий Json, который будет передан в качестве тела для запроса ReST с помощью команды Invoke-WebRequest cmdLet

{  
   "fields":{  
      "summary":"Execution Monday, August 27, 2018 3:24 PM",
      "project":{  
         "id":10401
      },
      "issuetype":{  
         "id":10103
      },
      "customfield_10527":[  
         "IC-54829",
         "IC-54830"
      ],
      "customfield_10539":[  
         "IC-54831"
      ]
   }
}

Использование следующего powershell

Write-Output 'Creating Test Execution'
$dateString = Get-Date -Format f
$createTestExecutionBody = @{
    fields = @{
        summary = 'Execution ' + $dateString
        project = @{
            id = $projectId
        }
        issuetype = @{
            id = $testExecutionIssueTypeId
        }
        customfield_10527 = ConvertTo-Json -InputObject @($testsArray)
        customfield_10539 = ConvertTo-Json -InputObject @($testPlanKey) 
    }
}

Два свойства настраиваемого поля являются коллекциями. Это то, что я вижу, когда проверяю HTTP для запроса

{
    "fields":  {
                   "summary":  "Execution Monday, August 27, 2018 3:24 PM",
                   "customfield_10527":  "[\r\n    \"IC-54829\",\r\n    \"IC-54830\"\r\n]",
                   "customfield_10539":  "[\r\n    \"IC-54831\"\r\n]",
                   "project":  {
                                   "id":  "10401"
                               },
                   "issuetype":  {
                                     "id":  "10103"
                                 }
               }
}

Если я использую флаг -Compress, символы новой строки исчезают, но я все еще получаю коллекцию, завернутую в кавычки, и внутренние кавычки экранируются. Это то, что фактически передается в HTTP как тело с -Compress

{
    "fields":  {
                   "summary":  "Execution Monday, August 27, 2018 4:50 PM",
                   "customfield_10527":  "[\"IC-54829\",\"IC-54830\"]",
                   "customfield_10539":  "[\"IC-54831\"]",
                   "project":  {
                                   "id":  "10401"
                               },
                   "issuetype":  {
                                     "id":  "10103"
                                 }
               }
}

Оба пользовательских поля являются коллекциями, которые будут содержать одно или несколько значений и построены на более раннем этапе как массивы. Мне нужна помощь в преобразовании всего этого, особенно пользовательских полей в первый пример json.

1 Ответ

0 голосов
/ 28 августа 2018

Так спросили и не сразу ответили. Я делал это сложнее, чем должно быть. Это работает:

Write-Output 'Creating Test Execution'
$dateString = Get-Date -Format f
$createTestExecutionBody = @{
    fields = @{
        summary = 'Execution ' + $dateString
        project = @{
            id = $projectId
        }
        issuetype = @{
            id = $testExecutionIssueTypeId
        }
        customfield_10527 = @(
            $testsArray
        )
        customfield_10539 = @(
            $testPlanKey
        )
    }
}

Я уверен, что, возможно, есть лучший способ сделать это, поэтому я прошу прощения за быстрый вопрос и ответ, но я хотел бы оставить это здесь, если кто-то, кто знает powershell, имеет правильный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...