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”键怎么办?如果找不到字符串怎么办?如果有多个事件发生怎么办?