使用PowerShell合并/串联多个json文件

Jad*_*onR 3 powershell json

我有多个要使用PowerShell串联或附加的.json文件。我希望下一个继续下去。为了简单起见,我将显示一个我想合并的两个文件的示例。

File1.json

[
    {
        "ItemID":  10746,
        "CompanyID":  3694,
        "Company":  "Sweet Mamma",
        "SRP":  0.0001,
        "UPC":  "9076625"
    },
    {
        "ItemID":  10761,
        "CompanyID":  3694,
        "Company":  "Sweet Mamma",
        "UPC":  "6128021"
    } ]
Run Code Online (Sandbox Code Playgroud)

File2.json

[
    {
        "ItemID":  477761,
        "CompanyID":  4398,
        "Company":  "Moonlight",
        "UPC":  "4000308"
    },
    {
        "ItemID":  477761,
        "CompanyID":  4398,
        "Company":  "Moonlight",
        "SRP":  14.6500,
        "UPC":  "099904000308"
    }
]
Run Code Online (Sandbox Code Playgroud)

我知道我可以在Powershell中使用以下语法来连接两个json文件。

获取内容“ C:\ File1.json”,“ C:\ File2.json” | 设置内容“ C:\ CombinedOutput.json”

但是,当我执行此脚本时,我几乎得到了我所需要的东西,除了左首和尾括号(其中一个json文件结束而下一个开始)。这两个括号如下面示例中的中间部分所示,应将其删除并替换为上面示例中的逗号。

注意:我无法大胆,所以我在星号周围加了注意。

[
    {
        "ItemID":  10746,
        "CompanyID":  3694,
        "Company":  "Sweet Mamma",
        "SRP":  0.0001,
        "UPC":  "9076625"
    },
    {
        "ItemID":  10761,
        "CompanyID":  3694,
        "Company":  "Sweet Mamma",
        "UPC":  "6128021"
    }
**]**
**[**
    {
        "ItemID":  477761,
        "CompanyID":  4398,
        "Company":  "Moonlight",
        "UPC":  "4000308"
    },
    {
        "ItemID":  477761,
        "CompanyID":  4398,
        "Company":  "Moonlight",
        "SRP":  14.6500,
        "UPC":  "099904000308"
    }
]
Run Code Online (Sandbox Code Playgroud)

重申一下,这些括号...

]
[
Run Code Online (Sandbox Code Playgroud)

...应以逗号代替。

,
Run Code Online (Sandbox Code Playgroud)

然后,所需的输出文件将如下所示,甚至将几个json文件合并为一个文件,仍将使其像一个连续的json文件一样正常流动。

[
    {
        "ItemID":  10746,
        "CompanyID":  3694,
        "Company":  "Sweet Mamma",
        "SRP":  0.0001,
        "UPC":  "9076625"
    },
    {
        "ItemID":  10761,
        "CompanyID":  3694,
        "Company":  "Sweet Mamma",
        "UPC":  "6128021"
    },
    {
        "ItemID":  477761,
        "CompanyID":  4398,
        "Company":  "Moonlight",
        "UPC":  "4000308"
    },
    {
        "ItemID":  477761,
        "CompanyID":  4398,
        "Company":  "Moonlight",
        "SRP":  14.6500,
        "UPC":  "099904000308"
    }
]
Run Code Online (Sandbox Code Playgroud)

The*_*le1 6

实际上这很容易,因为它们都是数组:

$js1 = Get-Content -Path .\file1.json -Raw |
    ConvertFrom-Json
$js2 = Get-Content -Path .\file2.json -Raw |
    ConvertFrom-Json

$js1 + $js2 |
    ConvertTo-Json -Depth 5 |
    Out-File -FilePath .\combinedfiles.json
Run Code Online (Sandbox Code Playgroud)

PowerShell可以在此处本地连接数组。

  • @DavidSöderlund 更简单:`@($js1; $js2)`。这是数组子表达式运算符,会将任何内容转换为单个数组。 (3认同)