jq-根据子元素的搜索结果查找父元素

时间:2018-09-20 14:58:13

标签: json jq

对于以下json文件,我需要根据特定条目的搜索结果获取“ name”元素

例如:json.txt

{
  "regions": {
    "var1": {
      "name": "City 1",
      "domains": {
        "var3": {
          "Owner": "Joe"
        }
      }
    },
    "var2": {
      "name": "City 2",
      "domains": {
        "var4": {
          "Owner": "Brown"
        }
      }
    }
  }
}

我尝试了

$ jq --arg arg1 'var4' '.regions | if (to_entries[].value.domains[$arg1]) then to_entries[].value.name else empty end' json.txt

但返回

"City 1"
"City 2"

我希望结果仅提取

"City 2"

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

您需要将to_entries[]子句拉出if ... then ... else ... end

.regions | to_entries[] | if .value.domains[$arg1] then .value.name else empty end

这可以简化为:

.regions | to_entries[] | .value | select(.domains[$arg1]) | .name