【发布时间】:2022-02-01 02:51:11
【问题描述】:
我需要将 Invoke-WebRequest 调用的 json 结果导出到 .CSV 文件,以便非技术用户可以编辑数据。这是我将 json 保存到 .CSV 文件时的样子:
{
"Forecasts": [
{
"AccountNumber": "12345",
"Period": "2022-02-01T00:00:00",
"Field1": 3998.87968239,
"Field2": 2133.91206875
},
{
"AccountNumber": "12346",
"Period": "2022-03-01T00:00:00",
"Field1": 6741.483,
"Field2": 4007.857
}
]
}
我正在使用这行代码创建 .CSV 文件:
$json.Forecasts | ForEach-Object { $_ | Export-Csv -path $fileName -NoTypeInformation -Append -Force }
这很好用。在用户编辑数据并保存并关闭 .CSV 文件后,我需要将 .CSV 数据转换回看起来像原始 json 结构的 JArray(如上所示),以便我可以进行另一个 Invoke-WebRequest 调用(补丁) ,将 JArray 作为 Body 传递。
当我执行这行代码时:
$editedJson = Get-Content -Raw -Path "$fileName" | ConvertFrom-CSV | Select-Object -Property AccountNumber,Period,Field1,Field2 | ConvertTo-json
json 看起来像这样:
[
{
"AccountNumber": "12345",
"Period": "2022-02-01T00:00:00",
"Field1": "3900.87968239",
"Field2": "2100.91206875"
},
{
"AccountNumber": "12346",
"Period": "2022-03-01T00:00:00",
"Field1": "6700.483",
"Field2": "4000.857"
}
]
如您所见,它缺少 JArray 的“预测”部分,我不知道如何将 .CSV 数据恢复为这种格式。有人可以帮忙吗?
【问题讨论】:
-
另一个区别是你所有的数字现在都是字符串。 CSV 中没有数据类型,这就是为什么最初将所有内容都视为字符串的原因。要实现输出数组的真正奇偶校验,您需要在调用
ConvertTo-Json之前将每条记录中受影响的字段显式转换为[double]。同样的想法也适用于其他数据类型。
标签: json powershell csv