是否将两个json文件合并为一个?[duplicate]

rggaifut  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(161)
    • 此问题在此处已有答案**:

Merge two json objects(3个答案)
2天前关闭。
我需要将两个.Json文件合并为一个.Json文件:
第一个文件start.json如下所示:

{
    "MOUSE GESTURE L Start": {
        "prefix": "MOUSE GESTURE L Start To Start",
        "body": [
    "MG_Start()"
        ],
        "description": "Start Cursor back to its start"
    }
}

第二个文件end.json如下所示:

{
    "MOUSE GESTURE L Move To end": {
        "prefix": "MOUSE GESTURE L Move To end",
        "body": [
    "MG_Move()"
        ],
        "description": "Move Cursor back to its end"
    }
}

我的预期目标是:

{
    "MOUSE GESTURE L Start": {
        "prefix": "MOUSE GESTURE L Start To Start",
        "body": [
    "MG_Start()"
        ],
        "description": "Start Cursor back to its start"
    }
    "MOUSE GESTURE L Move To end": {
        "prefix": "MOUSE GESTURE L Move To end",
        "body": [
    "MG_Move()"
        ],
        "description": "Move Cursor back to its end"
    }   
}

我试过:

$Jstart = (Get-Content .\start.json -Raw) | ConvertFrom-Json
$JEnd = (Get-Content .\end.json -Raw) | ConvertFrom-Json

$Hash = [PSCustomObject]@{
    $Jstart = (Get-Content .\start.json -Raw) | ConvertFrom-Json
    $JEnd = (Get-Content .\end.json -Raw) | ConvertFrom-Json
}

但我得到了一个不想要的混乱输出:

{
  "@{MOUSE GESTURE L Start=}": {
    "MOUSE GESTURE L Start": {
      "prefix": "MOUSE GESTURE L Start To Start",
      "body": "MG_Start()",
      "description": "Start Cursor back to its start"
    }
  },
  "@{MOUSE GESTURE L Move To end=}": {
    "MOUSE GESTURE L Move To end": {
      "prefix": "MOUSE GESTURE L Move To end",
      "body": "MG_Move()",
      "description": "Move Cursor back to its end"
    }
  }
}

我试过各种变化,但情况变得更糟。有什么办法可以让我做对吗?谢谢
编辑:
@圣地亚哥斯夸松
虽然Solution适用于我提供的示例,但我在尝试将其适应我的代码时遇到了问题。
我遇到的问题是,如果其中一个.Json文件碰巧包含多个对象,如下所示:

{
    "MOUSE GESTURE L Move To end": {
        "prefix": "MOUSE GESTURE L Move To end",
        "body": [
    "MG_Move()"
        ],
        "description": "Move Cursor back to its end"
    },

    "Another Snippet": {
        "prefix": "MOUSE GESTURE L Move To end",
        "body": [
    "MG_Move()"
        ],
        "description": "Move Cursor back to its end"
    }
}

然后$left.PSObject.Properties.Add($($right.PSObject.Properties))失败,我得到错误:

MethodException: 
Cannot find an overload for "Add" and the argument count: "1".
mspsb9vt

mspsb9vt1#

最简单的方法可能是将一个对象附加到另一个对象上:

$left  = Get-Content .\start.json -Raw | ConvertFrom-Json
$right = Get-Content .\end.json -Raw | ConvertFrom-Json
foreach($prop in $right.PSObject.Properties) {
    $left.PSObject.Properties.Add($prop)
}
$left | ConvertTo-Json -Depth 99

生成的Json看起来像这样:

{
  "MOUSE GESTURE L Start": {
    "prefix": "MOUSE GESTURE L Start To Start",
    "body": [
      "MG_Start()"
    ],
    "description": "Start Cursor back to its start"
  },
  "MOUSE GESTURE L Move To end": {
    "prefix": "MOUSE GESTURE L Move To end",
    "body": [
      "MG_Move()"
    ],
    "description": "Move Cursor back to its end"
  }
}

相关问题