根据使用jq的值输入创建新的JSON

我有以下JSON

{
  "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","repository": "com-ghi"
  }
}
xiaoxue1006 回答:根据使用jq的值输入创建新的JSON

您可以使用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

看到它适用于jq-playground的单个字符串匹配

如果要查找多个条件匹配项,请在过滤器中使用布尔and / or语句

select( .value.shortName == "ghi" or .value.shortName == "abc" )

或者使用正则表达式完全匹配test()

中的字符串
select( .value.shortName | test("^(abc|ghi)$") )
,

以下是“吉”的解决方案:

jq --arg sn ghi '
    with_entries(select(.value.shortName == $sn))' input.json

在这里,--arg sn ghi的作用是将jq变量$ sn设置为JSON字符串"ghi"

本文链接:https://www.f2er.com/3104662.html

大家都在问