json - 如何使用 jq 过滤包含对象和字符串的数组?

标签 json jq

所以我对 jq 有这样的输入:

[
  "foo",
  {
    "a": 1,
    "b": 2
  },
  {
    "a": 1,
    "b": 3
  },
  {
    "a": 2,
    "b": 2
  }
]

我想选择 b 为 2 的所有对象作为数组:

[
  {
    "a": 1,
    "b": 2
  },
  {
    "a": 2,
    "b": 2
  }
]

但是列表中的字符串让这变得困难。

如果我尝试:

.[]|选择(.b == 2)

然后我得到错误:

jq:错误(位于/tmp/data.json:14):无法用字符串“b”索引字符串

有什么帮助吗?

最佳答案

其他答案建议使用 ? 这很好。另一种方法是使用内置的 objects 过滤器,它会丢弃不是对象的输入:

map(objects | select(.b == 2))
#   ^^^^^^^   ^^^^^^^^^^^^^^^
#   A         B

A:过滤掉非对象
B:此时,我们正在处理对象

稍微更冗长但效率可能更低?

关于json - 如何使用 jq 过滤包含对象和字符串的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67624282/

相关文章:

android - 当我使用 JSONParser (httpurlconnection) 运行我的 android 登录 Activity 时出现异常

javascript - 从旧的 html dom 元素创建 json

javascript - 如何在不使用 slurp 标志的情况下将 JSON 序列与 jq 结合起来?

json - 有没有办法获取 JSON 值中特定元素的路径?

bash - 如何将此 Bash 脚本转换为 PowerShell

javascript - 仅针对一个函数的 ajax 调用上的未定义索引

jquery - Laravel 格式查询 json 结果

android - 如何从 JSON 文件中解析?

node.js - Node child_process 中的奇怪管道行为?

shell - jq抑制404 json文件的解析错误