【问题标题】:JQ reusing resultsJQ 重用结果
【发布时间】:2018-07-11 12:02:14
【问题描述】:

我的输入、命令和第一个(部分)结果:

echo '
{
  "a": {
    "b": [
      "c",
      "d"
    ],
    "e": [
      "f",
      "g"
    ]
  },
  "h": {
    "c": [
      "i",
      "j"
    ],
    "d": [
      "k"
    ],
    "f": [
      "l",
      "m",
      "n"
    ],
    "g": [
      "o"
    ]
  }
}' | jq '.a | keys_unsorted[]'
"b"
"e"

我想遍历结果的(“b”,“e”)数组([“c”,“d”]和[“f”,“g”])并重用该查询的结果搜索我的树的第二部分(“h”部分),迭代结果数组并显示它们。

所以我的完整结果应该是这样的:

"b", "c", "i"
"b", "c", "j'
"b", "d", "k"
"e", "f", "l"
"e", "f", "m"
"e", "f", "n"
"e", "g", "o"

Catch 是,由于最终解决方案中的资源/时间限制,我想在单个查询中执行此操作。

我尝试了(很多)东西,比如“keys as $k ...”,但我无法思考如何使用它。

谁能给我一个提示或向我展示一个可行的解决方案并告诉我它是如何工作的?

提前致谢!

【问题讨论】:

  • 请尽可能遵循minimal reproducible example 准则。
  • 您能否更清楚地说明预期的输出?
  • 完成了给定输入的预期输出。谢谢。
  • 仅供参考:对于长文字输入字符串,您通常会使用 here-document(假设 shell 支持它)。这对您的问题没有实质性影响。

标签: arrays json variables iteration jq


【解决方案1】:

首先考虑这个过滤器:

(.a | keys_unsorted[]) as $k1
| (.a |.[$k1][]) as $k2
| (.h |.[$k2][]) as $k3
| [$k1, $k2, $k3]

使用您的数据,调用:

jq -c -f filter.jq input.json

产生:

["b","c","i"]
["b","c","j"]
["b","d","k"]
["e","f","l"]
["e","f","m"]
["e","f","n"]
["e","g","o"]

剩下的留作练习:-)

【讨论】:

  • 像魅力一样工作。谢谢!我会尝试自己找出原因。如果在 .nl 中,请大声喊叫:我给你买啤酒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 2022-07-06
  • 2019-10-24
  • 2018-08-26
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多