我们正在尝试使用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"
答案 0 :(得分:3)
ConvertTo-Json
是否用引号引起来取决于该值的类型。字符串用引号引起来,而其他类型(例如Integer或Boolean)则没有。
演示:
PS C:\> [PSCustomObject]@{'foo'=1} | ConvertTo-Json { "foo": 1 } PS C:\> [PSCustomObject]@{'foo'='1'} | ConvertTo-Json { "foo": "1" }
在处理JSON数据的应用程序期望它们为字符串的情况下,Excel工作表中的某些单元格可能包含数字而不是文本(然后进行相应转换)。
我看到了两种处理方法:
将值转换为字符串:
$data.parameters.client.value = [string]$ws.Cells.Item($Row, $col).Value
使用属性Value
代替属性Text
,该属性将单元格的值作为字符串返回:
$data.parameters.client.value = $ws.Cells.Item($Row, $col).Text