将Excel中的参数用引号引起来

时间:2018-10-26 23:12:21

标签: json excel powershell

我们正在尝试使用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 :(得分: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