Arrays 如何从cURL';带.JQ的ed-JSON

Arrays 如何从cURL';带.JQ的ed-JSON,arrays,json,curl,filter,jq,Arrays,Json,Curl,Filter,Jq,以上就是我正在使用的一个例子,我的问题是如何过滤掉任何代币,这样我一眼就能看到它有什么 我见过很多其他类似的答案 { "accounts": [ { "accountId": "account001", "tokens": [ "tokens1", "tokens2", "tokens

以上就是我正在使用的一个例子,我的问题是如何过滤掉任何代币,这样我一眼就能看到它有什么

我见过很多其他类似的答案

{
  "accounts": [
    {
      "accountId": "account001",
      "tokens": [
        "tokens1",
        "tokens2",
        "tokens3",
        "tokens4",
      ]
    }
  ]
}
但是,正如您所看到的,令牌没有像示例中那样的.name

其他人能告诉我如何获取我拥有的数据并搜索它以查看是否有令牌2吗


提前感谢您提供的任何帮助。

我能够在评论中使用马可鲁西迪的建议来解决问题


cat file.json | jq '.items[] | select(.name == "thing-3") | .'
如何过滤掉任何令牌,以便我一眼就能看到,所以有什么

其他人能告诉我如何获取我拥有的数据并搜索它以查看是否有令牌2吗

我不太确定我是否理解这个问题,但考虑到“如何过滤将
“tokens2”
列为代币的帐户?”的解释,因为这将是一件有意义且不完全是琐碎的事情,您可以对数据进行处理

给定jq查询:

jq '.accounts[].tokens[] | select(. == "tokens2")
从以下数据中查找
[“account001”、“account003”]

.accounts | map(select(.tokens | index("tokens2")) | .accountId)
解释如下:

  • .accounts
    将文档缩减为帐户列表
  • …|映射(选择(…)
    筛选出
    ..
    为其生成
    null
    的帐户
  • .tokens |.
    将每个帐户对象减少到其标记列表中(
    映射(…)
    是映射到的帐户数组的每个元素,因此
    .tokens
    是该帐户对象的子列表)
  • …|index(“tokens2”)
    生成非零索引,如果在列表中找不到该值,则生成
    null
  • 随后,在
    映射(…)
    内,但在
    选择(…)
    外,一个
    …|。accountId
    已应用,因此通过
    选择(…)
    过滤器的每个对象都将减少为仅其帐户id
您还可以通过移除某些零件来试验这些部件的工作方式:

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

如果找到匹配项,您希望实现的输出是什么?你想要回报什么?不确定我是否正确理解了你想要实现的目标。是否要检查
tokens2
是否包含在
tokens
数组中?如果是这样的话,类似这样的
jq'.accounts[].tokens[]| select(.==“tokens2”)'文件。json
将打印
“tokens2”
,如果找到,则不会打印任何内容。不确定如何在@MarcoLucidi中将您的答案标记为正确,但确实如此,谢谢。在这样做的过程中,我明白了为什么我需要更好地挖掘这两个帐户[]然后标记所有其他示例都显示了深入1的效果。
{
  "accounts": [
    {
      "accountId": "account001",
      "tokens": [
        "tokens1",
        "tokens2",
        "tokens3",
        "tokens4"
      ]
    },
    {
      "accountId": "account002",
      "tokens": [
        "tokens3",
        "tokens4"
      ]
    },
    {
      "accountId": "account003",
      "tokens": [
        "tokens1",
        "tokens2"
      ]
    }
  ]
}
.accounts | map(select(.tokens | index("tokens2")) | .accountId)
.accounts | map(select(.tokens | index("tokens2")))
[ .accounts[] | select(.tokens | index("tokens2")) | .accountId ]