Tiy*_*ose 0 bash shell json jq
我刚刚开始使用 jq,我需要使用 jq 检查给定的 json 是否存在于另一个 json 中?
假设这是我的json_input:
{
"info": {
"values": [
{
"data": [
{
"name": "name",
"value": "val"
}
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我需要检查上面的 json 输入是否存在于以下内容中available_json:
{
"info": {
"values": [
{
"data": [
{
"name": "name",
"value": "val"
},
{
"name": "name2",
"value": "val2"
},
{
"name": "name3",
"value": "val3"
}
],
"key1":"val1",
"key2":"val2"
}
],
"priority":1,
"objects":[
{
"name":"a"}
]
}
}
Run Code Online (Sandbox Code Playgroud)
json_input两个 json 都存储在变量中,并且应该根据任何(通用)报告任何给定输入的存在available_json。如何使用 jq 来完成此操作?
或者是否有其他更好的方法,例如将 json 转换为字符串然后进行比较?
PS:json对象的keyinfo是固定的并且values可以改变。
这太微不足道了,人们甚至可能不会想到它:使用 jq 过滤器包含:
jq 'contains({
"info": {
"values": [
{
"data": [
{
"name": "name",
"value": "val"
}
]
}
]
}
})' available.json
Run Code Online (Sandbox Code Playgroud)
输出将为true或false。如果您运行jq -e( ),它将相应地设置退出状态,这允许您在 shell 中与或/--exit-status一起使用它。if&&||
如果您input_json也存储在文件中:
jq --slurpfile input_json input_json 'contains($input_json[0])' available.json
Run Code Online (Sandbox Code Playgroud)
如果 JSON 文档存储在变量中,则--argjson改为--slurpfile:
jq --argjson input_json "$input_json" 'contains($input_json)' available.json
Run Code Online (Sandbox Code Playgroud)
或者仅仅依靠 shell 的参数扩展:
jq "contains($input_json)" available.json
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |