Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何用jq获取数组的索引_Arrays_Json_Bash_Jq - Fatal编程技术网

Arrays 如何用jq获取数组的索引

Arrays 如何用jq获取数组的索引,arrays,json,bash,jq,Arrays,Json,Bash,Jq,我想在该结构中搜索这个字符串tb1qpvtnfqqqs3cp4ly4375km7n5sga8hkdkujkm854 { "txid": "67bc5194442dc350312a7c0a5fc7ef912c31bf00b23349b4c3afdf177c91fb2f", "hash": "8392ded0647e4166eda342cee409c7d0e1e3ffab24de41866d2e6a7bd0a245b3", "version": 2, "size": 245, "

我想在该结构中搜索这个字符串
tb1qpvtnfqqqs3cp4ly4375km7n5sga8hkdkujkm854

{
  "txid": "67bc5194442dc350312a7c0a5fc7ef912c31bf00b23349b4c3afdf177c91fb2f",
  "hash": "8392ded0647e4166eda342cee409c7d0e1e3ffab24de41866d2e6a7bd0a245b3",
  "version": 2,
  "size": 245,
  "vsize": 164,
  "weight": 653,
  "locktime": 1764124,
  "vin": [
    {
      "txid": "69eed058cbd18b3bf133c8341582adcd76a4d837590d3ae8fa0ffee1d597a8c3",
      "vout": 0,
      "scriptSig": {
        "asm": "0014759fc698313da549948940508df6db93a319096e",
        "hex": "160014759fc698313da549948940508df6db93a319096e"
      },
      "txinwitness": [
        "3044022014a8eb758063c52bc970d42013e653f5d3fb3c190b55f7cfa72680280cc5138602202a873b5cad4299b2f52d8cccb4dcfa66fa6ec256d533788f54440d4cdad7dd6501",
        "02ec8ba22da03ed1870fe4b9f9071067a6a1fda6f582c5c858644e44bd401bfc0a"
      ],
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 0.37841708,
      "n": 0,
      "scriptPubKey": {
        "asm": "0 686bc8ce41505642c96f3eb99919fff63f4c0f11",
        "hex": "0014686bc8ce41505642c96f3eb99919fff63f4c0f11",
        "reqSigs": 1,
        "type": "witness_v0_keyhash",
        "addresses": [
          "tb1qdp4u3njp2pty9jt086uejx0l7cl5crc3x3phwd"
        ]
      }
    },
    {
      "value": 0.00022000,
      "n": 1,
      "scriptPubKey": {
        "asm": "0 0b173480108e035f92b1f52dbf4e90474f7b36dc",
        "hex": "00140b173480108e035f92b1f52dbf4e90474f7b36dc",
        "reqSigs": 1,
        "type": "witness_v0_keyhash",
        "addresses": [
          "tb1qpvtnfqqs3cp4ly4375km7n5sga8hkdkujkm854"
        ]
      }
    }
  ],
  "hex": "02000000000101c3a897d5e1fe0ffae83a0d5937d8a476cdad821534c833f13b8bd1cb58d0ee690000000017160014759fc698313da549948940508df6db93a319096efeffffff022c6b410200000000160014686bc8ce41505642c96f3eb99919fff63f4c0f11f0550000000000001600140b173480108e035f92b1f52dbf4e90474f7b36dc02473044022014a8eb758063c52bc970d42013e653f5d3fb3c190b55f7cfa72680280cc5138602202a873b5cad4299b2f52d8cccb4dcfa66fa6ec256d533788f54440d4cdad7dd65012102ec8ba22da03ed1870fe4b9f9071067a6a1fda6f582c5c858644e44bd401bfc0a1ceb1a00",
  "blockhash": "000000009acb8b4f06a97beb23b3d9aeb3df71052dabec94465933b564c27f50",
  "confirmations": 2,
  "time": 1591687001,
  "blocktime": 1591687001
}

我想得到vout的索引,在这种情况下是1。是否可以使用jq?

以下假设您希望将给定字符串作为叶值的第一个对象的.vout中的索引,并且您考虑使用0作为索引原点

一个简单且合理有效的jq计划可找到所有此类指数,如下所示:

.vout
| range(0;length) as $i
| if any(.[$i]|..;
         . == "tb1qpvtnfqqs3cp4ly4375km7n5sga8hkdkujkm854") 
  then $i 
  else empty
  end
对于给定的输入,这实际上会产生1,这与问题描述一致,所以我们似乎走在了正确的轨道上


要获取第一个索引,您可以将上面的内容包装在
first(…)
中,但在这种情况下,如果没有出现,结果将是空流。因此,也许您更愿意将上述内容包装在
first(…)//null

中。以下假设您希望将给定字符串作为叶值的第一个对象的.vout中的索引,并且您考虑使用0作为索引原点

一个简单且合理有效的jq计划可找到所有此类指数,如下所示:

.vout
| range(0;length) as $i
| if any(.[$i]|..;
         . == "tb1qpvtnfqqs3cp4ly4375km7n5sga8hkdkujkm854") 
  then $i 
  else empty
  end
对于给定的输入,这实际上会产生1,这与问题描述一致,所以我们似乎走在了正确的轨道上


要获取第一个索引,您可以将上面的内容包装在
first(…)
中,但在这种情况下,如果没有出现,结果将是空流。因此,也许您更愿意将上述内容首先(…)//null

封装在
中,但不清楚您到底想要什么

我猜您需要
vout
元素的
n
,该元素在其地址列表中包含给定地址。这可以通过以下方式实现:

jq '.vout[]
    | select(.scriptPubKey.addresses[] == "tb1qpvtnfqqs3cp4ly4375km7n5sga8hkdkujkm854")
    | .n
   ' file.json
你也可以使用

select((.scriptPubKey.addresses[]
    | contains("tb1qpvtnfqqs3cp4ly4375km7n5sga8hkdkujkm854")))

搜索地址。

不清楚您到底想要什么

我猜您需要
vout
元素的
n
,该元素在其地址列表中包含给定地址。这可以通过以下方式实现:

jq '.vout[]
    | select(.scriptPubKey.addresses[] == "tb1qpvtnfqqs3cp4ly4375km7n5sga8hkdkujkm854")
    | .n
   ' file.json
你也可以使用

select((.scriptPubKey.addresses[]
    | contains("tb1qpvtnfqqs3cp4ly4375km7n5sga8hkdkujkm854")))

搜索地址。

当你说
索引时,你是指.vout中的索引还是对应的“n”值?如果没有“n”键怎么办?如果找不到字符串怎么办?如果有多次出现怎么办?当你说
index
,你是指.vout中的索引还是对应的“n”值?如果没有“n”键怎么办?如果找不到字符串怎么办?如果有多个事件发生怎么办?