【问题标题】:How to convert string to integer with ConvertTo-Json?如何使用 ConvertTo-Json 将字符串转换为整数?
【发布时间】:2013-07-12 18:14:27
【问题描述】:

我正在使用 PowerShell 将 CSV 文件转换为 JSON 格式。问题是 CSV 将双引号括在列值周围,甚至是整数。在转换过程中如何将它们转换为整数?

这是我用来将 *.csv 文件目录转换为 *.json 的脚本:

Get-ChildItem .\*.csv | Foreach-Object {
  $basename = $_.BaseName
  import-csv $_ | ConvertTo-Json -Compress | Foreach {$_ -creplace '"NULL"','null'} | Out-File ".\$basename.json"
}

这是我的源 CSV:

"Id","Name","Active"
"1","Test 1","1"
"2","Test 2","0"
"3","Test 3","1"

这是它的输出:

[
{"Id":"1","Name":"Test 1","Active":"1"}
{"Id":"2","Name":"Test 2","Active":"0"}
{"Id":"3","Name":"Test 3","Active":"1"}
]

如何让它输出这个?:

[
{"Id":1,"Name":"Test 1","Active":1}
{"Id":2,"Name":"Test 2","Active":0}
{"Id":3,"Name":"Test 3","Active":1}
]

【问题讨论】:

    标签: json powershell csv powershell-3.0


    【解决方案1】:

    发生这种情况的原因是 Import-Csv 为每列创建了一个带有字符串属性的对象,因此 ConvertTo-Json 为您提供了带引号的字符串。您可以在 Import-CsvConvertTo-Json 之间使用 Select-Object 将数字属性重铸为整数,但我认为最简单的方法是这样做是在您的 foreach 块中添加一个正则表达式替换:

    import-csv $_ | ConvertTo-Json -Compress | 
        Foreach {$_ -creplace '"NULL"','null' -replace ':"([0-9]+)"',':$1'} | 
            Out-File ".\$basename.json"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多