【问题标题】:Compare Two Json File of Different Syntax Through Powershell通过Powershell比较两个不同语法的Json文件
【发布时间】:2020-11-04 20:49:53
【问题描述】:

我想从一个文件到另一个文件中搜索特定的关键字,如果一个文件中的关键字不存在,那么它应该显示该关键字。 两个 Json 文件都有不同的语法。 我想通过 Powershell 来实现:

文件 1:Data.json

[
    "The request will be processed at a domain controller for domain xxx.COM.",
    "",
    "Group name     ROL_xxx_xxx.NetAppProdAdmins",
    "Comment        Owner: Ramesh (XXXX\\ramesh)",
    "",
    "Members",
    "",
    "-------------------------------------------------------------------------------",
    "RAJESH1                  RAMESH1                  ASHOK12                  ",
    "ABHIJIT                  RITIKA1                  BHUPESH                  ",
    "YASHWAN                  ",
    "The command completed successfully.",
    ""
]

第二个文件:Data2.json

{
    "Group": {
        "Path": "/xx-life-xxxxx-xxxx/", 
        "CreateDate": "2017-12-08T12:08:39Z", 
        "GroupId": "xxxxxxxxxxxxxxxxxxxxx", 
        "Arn": "arn:aws:iam::123456789012:group/xx-xxxx-xxxxxxx-xxxxxx/xx-xxxx-xxxxxxx-xxxxxx-admin", 
        "GroupName": "xx-xxxx-xxxxxxx-xxxxxx-admin"
    }, 
    "Users": [
        {
            "UserName": "RAJESH1", 
            "PasswordLastUsed": "2020-05-06T07:10:37Z", 
            "CreateDate": "2020-03-27T07:12:44Z", 
            "UserId": "ASDFGHJKLQWERTYUIOZX", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/RAJESH1"
        }, 
        {
            "UserName": "RAMESH1", 
            "PasswordLastUsed": "2020-06-04T07:01:44Z", 
            "CreateDate": "2019-07-25T08:36:28Z", 
            "UserId": "ASDFGHJKLQWERTYUIOZX", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/RAMESH1"
        }, 
        {
            "UserName": "ASHOK12", 
            "PasswordLastUsed": "2020-06-03T13:18:49Z", 
            "CreateDate": "2020-04-20T14:43:59Z", 
            "UserId": "ASDFGHJKLQWERTYUIOZX", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/ASHOK12"
        }, 
        {
            "UserName": "ABHIJIT", 
            "PasswordLastUsed": "2020-06-05T03:20:48Z", 
            "CreateDate": "2019-05-15T09:55:04Z", 
            "UserId": "AIDA5GALAASEO7TUXCB3T", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/ABHIJIT"
        }, 
        {
            "UserName": "RITIKA1", 
            "PasswordLastUsed": "2020-06-02T14:01:11Z", 
            "CreateDate": "2019-08-01T11:13:30Z", 
            "UserId": "AIDA5GALAASEOADBBKJ7N", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/RITIKA1"
        }, 
        {
            "UserName": "BHUPESH", 
            "PasswordLastUsed": "2020-06-01T08:13:14Z", 
            "CreateDate": "2018-07-26T14:11:10Z", 
            "UserId": "AIDAI2A5HABPPLA6PL5AC", 
            "Path": "/xx-xxxx-xxxxxxx-xxxxxx/", 
            "Arn": "arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/BHUPESH"
        }
    ]
}

所以我特别想从第一个 json 到第二个 Json 搜索 RAJESH1,如果它在那里,那么如果它不在那里也没关系,那么它会在输出中显示 RAJESH1。 在上述两个 JSON 中,第二个 JSON 中不存在“YASHWAN”,因此输出需要以“YASHWAN”的形式出现。

提前致谢。

【问题讨论】:

    标签: json windows powershell


    【解决方案1】:

    为了测试,我在 Data2.JSON 文件中添加了一个额外的用户:

    { "用户名": "PARIDA", "PasswordLastUsed": "2020-06-01T08:13:14Z", "创建日期": "2018-07-26T14:11:10Z", "UserId": "AIDAI2A5HABPPLA6PL5AX", "路径": "/xx-xxxx-xxxxxxx-xxxxxx/", “arn”:“arn:aws:iam::123456789012:user/xx-xxxx-xxxxxxx-xxxxxx/PARIDA” }

    能够更好地展示结果。

    您可以像这样比较两个文件中的成员:

    # read the JSON files
    $data1 = Get-Content -Path 'Data.json' -Raw | ConvertFrom-Json
    $data2 = Get-Content -Path 'Data2.json' -Raw | ConvertFrom-Json
    
    # get the members from $data1
    $members1 = (($data1 -join '' -split '-{2,}')[-1] -split 'The command')[0].Trim() -split '\s+'
    
    # get the members from $data1
    $members2 = $data2.Users.UserName
    
    # compare both member arrays
    Compare-Object -ReferenceObject $members1 -DifferenceObject $members2
    

    输出看起来像

    InputObject SideIndicator
    ----------- -------------
    PARIDA      =>           
    YASHWAN     <= 
    

    SideIndicator 将显示在哪个文件中发现了差异,即

    • =&gt; 表示在 $data2 中找到了成员名称 PARIDA,但在 $data1 中没有找到
    • &lt;= 表示成员名 YASHWAN 在 $data1 中找到,但在 $data2 中找不到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多