是否有一些简单的方法可以使用PowerShell将一个JSON文件扩展到另一个文件?目前我试图编写一个允许我这样做的循环函数*,但也许有一个更简单的解决方案呢?
*迭代转换为PSCustomObject
的JSON的属性,并在需要时替换它们(实际上check my answer below)
编辑:我需要做类似jquery.extend所做的事情,我的输入是:
{
"name": "Some name",
"value": 1,
"config": {
"debug": false,
"output": "c:\\"
}
}
和
{
"value": 2,
"config": {
"debug": true
},
"debug": {
"log": true
}
}
我的输出应该是:
{
"name": "Some name",
"value": 2,
"config": {
"debug": true,
"output": "c:\\"
},
"debug": {
"log": true
}
}
P.S。通常我需要编写一个可以从批处理文件运行的脚本,并且不需要第三方库(仅限于Windows资源)。我尝试使用Cscript JavaScript,但是当我发现时,我决定不使用它,解析JSON的唯一内置方法是评估它。
答案 0 :(得分:9)
经过大量的反复试验后,我设法编写了我的经常性功能。
function ExtendJSON($base, $ext)
{
$propNames = $($ext | Get-Member -MemberType *Property).Name
foreach ($propName in $propNames) {
if ($base.PSObject.Properties.Match($propName).Count) {
if ($base.$propName.GetType().Name -eq "PSCustomObject")
{
$base.$propName = ExtendJSON $base.$propName $ext.$propName
}
else
{
$base.$propName = $ext.$propName
}
}
else
{
$base | Add-Member -MemberType NoteProperty -Name $propName -Value $ext.$propName
}
}
return $base
}
$file1 = (Get-Content $args[0]) -join "`n" | ConvertFrom-Json
$file2 = (Get-Content $args[1]) -join "`n" | ConvertFrom-Json
#Out-File produces incorrect encoding
#ExtendJSON $file1 $file2 | ConvertTo-Json | Out-File $args[2]
$output = ExtendJSON $file1 $file2 | ConvertTo-Json
#Save output as BOMless UTF8
[System.IO.File]::WriteAllLines($args[2], $output)
我不知道这是否是实现目标的最简单方法,但它确实完成了工作。这也是如何组合\ combine \ merge两个PSCustomObject
的答案,这似乎没有人问过(也许我在这里打开了大门)。我几乎倾向于重写这个问题,但我的直觉告诉我可能有不同的方法使用PowerShell扩展JSON,这并不一定需要将我的JSON文件转换为PSCustomObject
。
答案 1 :(得分:-1)
如果您正在运行PowerShell 3.0或更高版本,则可以使用内置的ConvertFrom-Json \ {{}}} cmdlet。
如果你坚持使用PS 2.0,请查看ConvertTo-Json项目或Convert between PowerShell and JSON。