如何使用jq合并这两个JSON文件
我用jq1.5来做这个。我有两个json文件:下面是1.json和2.json。这两个文件都包含语句[]数组中的对象,我想将这些对象合并成一个文件(result.json) 1.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/
{
"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)