繁体   English   中英

如何从 cURL 的数组中过滤值 - 带有 .JQ 的 JSON

[英]How to filter values from an array that was cURL'ed - JSON with .JQ

{
  "accounts": [
    {
      "accountId": "account001",
      "tokens": [
        "tokens1",
        "tokens2",
        "tokens3",
        "tokens4",
      ]
    }
  ]
}

所以上面是我正在使用的一个例子,我的问题是如何过滤掉任何令牌,以便我可以一目了然地看到有什么?

我已经看到很多这样的其他答案

{
    "ok": true,
    "items": [
        {"id": 123, "name": "thing-1"},
        {"id": 124, "name": "thing-2"},
        {"id": 125, "name": "thing-3"}
    ]
}

cat file.json | jq '.items[] | select(.name == "thing-3") | .'

但是,正如您所看到的,令牌不像他们的示例那样具有 .name 。

其他人可以让我知道如何获取我拥有的数据并搜索它以查看它是否有 token2?

在此先感谢您提供的任何帮助。

我能够在评论中使用 MarcoLucidi 的建议来解决问题

jq '.accounts[].tokens[] | select(. == "tokens2")

如何过滤掉任何令牌,以便我一目了然地看到它有什么?

其他人可以让我知道如何获取我拥有的数据并搜索它以查看它是否有 token2?

我不确定我是否理解这个问题,但鉴于“如何过滤将"tokens2"列为令牌的帐户的解释? 因为这将是您可以对数据做的有意义且并非完全微不足道的事情。

鉴于此 jqplay 代码段,jq 查询:

.accounts | map(select(.tokens | index("tokens2")) | .accountId)

从以下数据中查找["account001", "account003"]

{
  "accounts": [
    {
      "accountId": "account001",
      "tokens": [
        "tokens1",
        "tokens2",
        "tokens3",
        "tokens4"
      ]
    },
    {
      "accountId": "account002",
      "tokens": [
        "tokens3",
        "tokens4"
      ]
    },
    {
      "accountId": "account003",
      "tokens": [
        "tokens1",
        "tokens2"
      ]
    }
  ]
}

解释如下:

  • .accounts将文档缩减为帐户列表。
  • ... | map(select(...)) ... | map(select(...))过滤掉...产生null的账户。
  • .tokens | ... .tokens | ...将每个帐户对象减少到其令牌列表( . inside map(...)是被映射的帐户数组的每个元素,因此.tokens是该帐户对象的子列表)。
  • ... | index("tokens2") ... | index("tokens2")生成一个非零索引,如果在列表中找不到该值,则生成null
  • 随后,在map(...)内部但在select(...)外部,一个... | .accountId ... | .accountId被应用,因此通过select(...)过滤器的每个对象都减少到只有它的帐户 ID。

您还可以通过删除某些部分来试验每个部分的工作方式:

.accounts | map(select(.tokens | index("tokens2")) | .accountId)
.accounts | map(select(.tokens | index("tokens2")))
[ .accounts[] | select(.tokens | index("tokens2")) | .accountId ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM