繁体   English   中英

Powershell:将JSON嵌套数组重新格式化为对象数组

[英]Powershell: Reformat JSON nested Arrays to Array of Objects

我正在尝试修改格式错误的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中执行此操作。

由于您在这里处理结构化数据,我认为最好的方法是解析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-JsonConvertFrom-Json是序列化/反序列化JSON所需的cmdlet。 然后你就可以使用这些对象。

在这种情况下,我将浏览$a1每个顶级数组并创建包含所需属性的哈希表。 然后我用这些属性创建一个PSObject ForEach-Object cmdlet返回(结果是这些对象的数组),然后将其直接传送到ConvertTo-Json以提供所需的输出。

我认为更好的方法是通过ConvertFrom-Json读取第一个JSON格式,然后获取该数组数组,并为每一行,从哈希表创建一个PSCustomObject,例如[PSCustomObject]@{title1=$arr[$row][0]; title2=$arr[$row][1];...} [PSCustomObject]@{title1=$arr[$row][0]; title2=$arr[$row][1];...} 一旦你有了PSCustomObject的数组,用ConvertTo-Json将它转换回JSON。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM