Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jq根据值条目创建新的JSON_Json_Shell_Jq - Fatal编程技术网

使用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”