使用jq根据值条目创建新的JSON
我有下面的问题使用jq根据值条目创建新的JSON,json,shell,jq,Json,Shell,Jq,我有下面的问题 { "com-abc": { "componentName": "com-abc", "shortName": "abc", "tag": "1234", "commitId": "bb59d7c", "repository": "com-abc" }, "com-def": { "componentName": "com-def", "shortName": "def", "tag": "5678",
{
"com-abc": {
"componentName": "com-abc",
"shortName": "abc",
"tag": "1234",
"commitId": "bb59d7c",
"repository": "com-abc"
},
"com-def": {
"componentName": "com-def",
"shortName": "def",
"tag": "5678",
"commitId": "bb59d7cwfer",
"repository": "com-def"
},
"com-ghi": {
"componentName": "com-ghi",
"shortName": "ghi",
"tag": "91011",
"commitId": "b55cwfer",
"repository": "com-ghi"
},
"com-jkl": {
"componentName": "com-jkl",
"shortName": "jkl",
"tag": "9107766",
"commitId": "b55cwfer10f",
"repository": "com-jkl"
}
}
我的问题是:
值中有参数“shortName”。如果“shortName”与特定值匹配,我将尝试使用jq创建一个新的json。例如,如果我将shortName作为'ghi'传递,那么新的json应该只包含以下示例。我在这里尝试使用jq
{
"com-ghi": {
"componentName": "com-ghi",
"shortName": "ghi",
"tag": "91011",
"commitId": "b55cwfer",
"repository": "com-ghi"
}
}
您可以使用
to_entries()
从JSON对象创建一个键/值对,并将.shortName
字段与所需字符串匹配,然后使用from_entries
将键值对转换回实际的JSON
jq 'to_entries | map( select( .value.shortName == "ghi" ) ) | from_entries'
或者使用--arg
字段从命令行提供参数字符串。这样,sn
成为包含字符串ghi
的变量,该字符串可在过滤器内部使用
jq --arg sn ghi 'to_entries | map( select( .value.shortName == $sn ) ) | from_entries' json
查看它在以下位置为单个字符串匹配工作:
如果要查找多个条件匹配,请在筛选器中使用布尔和/或语句
select( .value.shortName == "ghi" or .value.shortName == "abc" )
或者使用正则表达式精确匹配test()中的字符串
您可以使用to_entries()
从JSON对象创建一个键/值对,并将.shortName
字段与所需字符串匹配,然后使用from_entries
将键值对转换回实际的JSON
jq 'to_entries | map( select( .value.shortName == "ghi" ) ) | from_entries'
或者使用--arg
字段从命令行提供参数字符串。这样,sn
成为包含字符串ghi
的变量,该字符串可在过滤器内部使用
jq --arg sn ghi 'to_entries | map( select( .value.shortName == $sn ) ) | from_entries' json
查看它在以下位置为单个字符串匹配工作:
如果要查找多个条件匹配,请在筛选器中使用布尔和/或语句
select( .value.shortName == "ghi" or .value.shortName == "abc" )
或者使用正则表达式精确匹配test()中的字符串
对于“ghi”,这里有一个解决方案:
这里,--arg sn ghi
的作用是将jq变量$sn设置为JSON字符串“ghi”
这里有一个关于“ghi”的解决方案:
这里,--arg sn ghi
的作用是将jq变量$sn设置为JSON字符串“ghi”