如何使用jq合并这两个JSON文件

如何使用jq合并这两个JSON文件,json,bash,jq,Json,Bash,Jq,我用jq1.5来做这个。我有两个json文件:下面是1.json和2.json。这两个文件都包含语句[]数组中的对象,我想将这些对象合并成一个文件(result.json) 1.json: { "Statement": [{ "Resource": [ "arn:aws:autoscaling:*:55555555:autoScalingGroup:*:autoScalingGroupName/${aws:PrincipalTag/

我用jq1.5来做这个。我有两个json文件:下面是1.json和2.json。这两个文件都包含语句[]数组中的对象,我想将这些对象合并成一个文件(result.json)

1.json:

{
    "Statement": [{
            "Resource": [
                "arn:aws:autoscaling:*:55555555:autoScalingGroup:*:autoScalingGroupName/${aws:PrincipalTag/Service}-*"
            ],
            "Effect": "Allow",
            "Action": [
                "autoscaling:ExitStandby",
                "autoscaling:RecordLifecycleActionHeartbeat"
            ],
            "Sid": "ascIBP0"
        }
    ],
    "Version": "2012-10-17"
}
和具有相同结构的2.json:Statement[…]

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "lambda:UpdateEventSourceMapping",
                "lambda:CreateEventSourceMapping",
                "lambda:DeleteEventSourceMapping"
            ],
            "Effect": "Allow",
            "Condition": {
                "ArnLike": {
                    "lambda:FunctionArn": "arn:aws:lambda:*:*:function:${aws:PrincipalTag/Service}-*"
                }
            },
            "Resource": "*",
            "Sid": "lmbIBP0"
        }
    ]
}
results.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Resource": [
                "arn:aws:autoscaling:*:55555555:autoScalingGroup:*:autoScalingGroupName/${aws:PrincipalTag/Service}-*"
            ],
            "Effect": "Allow",
            "Action": [
                "autoscaling:ExitStandby",
                "autoscaling:RecordLifecycleActionHeartbeat"
            ],
            "Sid": "ascIBP0"
        },  
        {
            "Action": [
                "lambda:UpdateEventSourceMapping",
                "lambda:CreateEventSourceMapping",
                "lambda:DeleteEventSourceMapping"
            ],
            "Effect": "Allow",
            "Condition": {
                "ArnLike": {
                    "lambda:FunctionArn": "arn:aws:lambda:*:*:function:${aws:PrincipalTag/Service}-*"
                }
            },
            "Resource": "*",
            "Sid": "lmbIBP0"
        }
    ]
}
我已经接近了,但我不能正确地理解它。我一直在尝试这些组合:

jq -s '.[0] * .[1]' 1.json 2.json
jq -s '.[1] * .[0]' 1.json 2.json
jq -s '.[] * .[]' 1.json 2.json

仍然没有运气

对于这种特定情况,您可以简单地添加两个对象的
语句
字段,如下所示:

jq '.Statement += input.Statement' file1 file2

刚开始尝试时,它似乎工作正常。我不明白“input.Statement”是什么意思。您能详细介绍一下它是如何工作的吗?
。Statement
文件1
中的
Statement
字段,
输入。Statement
文件2
的字段;i、 e<代码>输入计算为输入流中的下一个实体。而
+=
只需将右侧的实体添加到字段中,即可更新其左侧的字段。正如我已经说过的,这个解决方案只对你问题中的琐碎任务有用。为此,你需要像
reduceinputs.Statement As$in(.;.Statement+=$in)