簡體   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