【问题标题】:Search and extract value using JQ command line processor使用 JQ 命令行处理器搜索和提取值
【发布时间】:2019-09-14 12:01:07
【问题描述】:

我有一个与以下内容非常相似的 JSON 文件:

[
  {
    "uuid": "832390ed-58ed-4338-bf97-eb42f123d9f3",
    "name": "Nacho"
  },
  {
    "uuid": "5b55ea5e-96f4-48d3-a258-75e152d8236a",
    "name": "Taco"
  },
  {
    "uuid": "a68f5249-828c-4265-9317-fc902b0d65b9",
    "name": "Burrito"
  }
]

我试图弄清楚如何使用 JQ 命令行处理器首先找到我输入的 UUID,然后根据该输出找到相关项目的名称。例如,如果我输入 UUID a68f5249-828c-4265-9317-fc902b0d65b9 它应该搜索 JSON 文件,找到匹配的 UUID,然后返回名称 Burrito。我在 Bash 中这样做。我意识到除了 JQ 之外,它可能还需要一些外部逻辑。我会继续考虑它并在这里更新一下。我知道我可以用一种过于复杂的方式来做到这一点,但我知道可能有一种非常简单的 JQ 方法可以在一两行中做到这一点。请帮帮我。

https://shapeshed.com/jq-json/#how-to-find-a-key-and-value

【问题讨论】:

  • 为什么这个标记太宽泛了?
  • @Atomiklan - 如果指定的uuid 值出现多次怎么办?
  • @Atomiklan,还有一个 alternative 解决方案可用于您的问题中的 JSON 操作 - 基于新的 walk-path unix 实用程序 jtc:uuid='a68f5249-828c-4265-9317-fc902b0d65b9'; <file.json jtc -w"<$uuid>[-1][name]"乙>。 walk-path 相当琐碎,但如果您愿意,我可以在单独的答案中详细说明(PS。我是该工具的开发人员)。

标签: json jq lookup


【解决方案1】:

您可以使用选择:

jq -r  --arg query Burrito '.[] | select( .name == $query ) | .uuid ' tst.json

【讨论】:

  • 知道如何将变量放入 Burrito 中吗?
  • 似乎单引号工作 '$variable' 但 JQ 因编译错误而吓坏了。
  • jq -r '.[] |选择(.uuid == '$test')| .name '
  • 根据所询问的内容,应该是相反的,jq -r --arg query a68f5249-828c-4265-9317-fc902b0d65b9 '.[] | select( .uuid == $query ) | .name ' tst.json
  • 是的,你是对的。我只是翻了一下索林的回答。
猜你喜欢
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多