Обернуть параметры из Excel в кавычки - PullRequest
0 голосов
/ 27 октября 2018

Мы пытаемся использовать PowerShell для заполнения некоторых файлов JSON. Параметры находятся в листе Excel, большинство параметров JSON заполняются кавычками ("") вокруг них. Однако есть некоторые, которые этого не делают, они вызывают сбой развертывания.

Есть ли способ получить информацию из Excel, а затем убедиться, что она заключена в кавычки в файле JSON.

Код ниже:

$ws = $wb.Worksheets.Item(1)
$data = Get-Content -Path "$path\$jsonfile" -Raw | ConvertFrom-Json
$Row = 2
$col = 2  
$data.parameters.client.value = $ws.Cells.Item($Row, $col).Value()
$data.parameters.user.value = $ws.Cells.Item($Row, $col).Offset(1, 0).Value()
$data.parameters.business.value = $ws.Cells.Item($Row, $col).Offset(2, 0).Value()
$data.parameters.dev.value = $ws.Cells.Item($Row, $col).Offset(3, 0).Value()

$data | ConvertTo-Json -Depth 9 | % {
    [System.Text.RegularExpressions.Regex]::Unescape($_)
} | Set-Content -Path "$newpath\$JSONFile"

1 Ответ

0 голосов
/ 27 октября 2018

То, будет ли ConvertTo-Json заключать в кавычки значение, зависит от типа этого значения.Строки заключаются в кавычки, другие типы, такие как Integer или Boolean, не являются.

Демонстрация:

PS C:\> <b>[PSCustomObject]@{'foo'=1} | ConvertTo-Json</b>
{
    "foo":  1
}
PS C:\> <b>[PSCustomObject]@{'foo'='1'} | ConvertTo-Json</b>
{
    "foo":  "1"
}

Предположительно, некоторые ячейки на листе Excel содержат числа, а не текст (которые затемпреобразовано соответственно), в то время как приложение, обрабатывающее данные JSON, ожидает, что они будут строками.

Я вижу два способа, которыми вы могли бы справиться с этим:

  • Приведите значения в строку:

    $data.parameters.client.value = [string]$ws.Cells.Item($Row, $col).Value
    
  • Вместо свойства Value используйте свойство Text, которое возвращает значение ячейки в виде строки:

    $data.parameters.client.value = $ws.Cells.Item($Row, $col).Text
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...