简体   繁体   English

将两个 json 文件合并为一个文件?

[英]Merging two json files into one?

I have two .Json files I need to merge into one .Json file:我有两个.Json文件需要合并到一个.Json文件中:

The first file start.json looks like this:第一个文件start.json如下所示:

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

The second file end.json looks like this:第二个文件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"
    }
}

The Expected out I am aiming for is:我的预期目标是:

{
    "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"
    }   
}

I have tried:我试过了:

$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
}

but I get a undesired jumbled output:但我得到了不希望的混乱输出:

{
  "@{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"
    }
  }
}

I've tried variations but things just get worse.我试过变体,但事情变得更糟。 Any ideas on how I can get this right?关于如何做对的任何想法? Thank you谢谢


EDIT:编辑:

@Santiago Squarzon @圣地亚哥斯夸松

While solution works for the example I provided, I am getting problems trying to adapt it to my code.虽然解决方案适用于我提供的示例,但我在尝试使其适应我的代码时遇到了问题。

The prblem I am having is, if one of the .Json files happens to have more than one object in it, like this:我遇到的问题是,如果其中一个.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"
    }
}

Then $left.PSObject.Properties.Add($($right.PSObject.Properties)) failss, I get the error:然后$left.PSObject.Properties.Add($($right.PSObject.Properties))失败,我得到错误:

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

Probably the easiest to go about this would be to append one object to the other:可能最简单的方法是将一个对象附加到另一个对象:

$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

Resulting Json would look something like this:生成的 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"
  }
}

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

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