我正在尝试修改格式错误的JSON文本文件,目前看起来像这样:
[
["val1", "val2", "val3", "val4"],
["val5", "val6", "val7", "val8"],
["val9", "val10", "val11", "val12"]
]
我还有一个包含字段名称的其他数组
["title1", "title2", "title3", "title4"]
我想输出一个如下所示的final.json文本文件:
[
{"title1": "val1", "title2": "val2", "title3": "val3", "title4": "val4"},
{"title1": "val5", "title2": "val6", "title3": "val7", "title4": "val8"},
{"title1": "val9", "title2": "val10", "title3": "val11", "title4": "val12"}
]
我想最好的方法是取每行,按,
拆分,然后将它们重新添加到标题名称上,但我不确定如何在PowerShell中执行此操作
答案 0 :(得分:2)
由于您在这里处理结构化数据,我认为最好的方法是解析JSON,并使用生成的对象。创建所需的对象,然后转换回JSON:
$j1 = @'
[
["val1", "val2", "val3", "val4"],
["val5", "val6", "val7", "val8"],
["val9", "val10", "val11", "val12"]
]
'@
$j2 = @'
["title1", "title2", "title3", "title4"]
'@
$a1 = $j1 | ConvertFrom-Json
$a2 = $j2 | ConvertFrom-Json
0..($a1.Count-1) | ForEach-Object {
$i = $_
$props = @{}
0..($a2.Count-1) | ForEach-Object {
$props[$a2[$_]] = $a1[$i][$_]
}
New-Object PSOBject -Property $props
} | ConvertTo-Json
ConvertTo-Json
和ConvertFrom-Json
是序列化/反序列化JSON所需的cmdlet。然后你就可以使用这些对象了。
在这种情况下,我将浏览$a1
中的每个顶级数组,并创建包含所需属性的哈希表。然后我用这些属性创建PSObject
。从ForEach-Object
cmdlet返回(结果是这些对象的数组),然后将其直接传送到ConvertTo-Json
以提供所需的输出。
答案 1 :(得分:2)
我认为更好的方法是通过ConvertFrom-Json读取第一个JSON格式,然后获取该数组数组,并为每一行从哈希表创建一个PSCustomObject,例如: [PSCustomObject]@{title1=$arr[$row][0]; title2=$arr[$row][1];...}
。一旦你有了PSCustomObject的数组,用ConvertTo-Json将它转换回JSON。