json jq返回一个空值数组

qxsslcnc  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(179)

我有一个巨大的json文件(大约7GB),包含多个元素,我们称之为data.json。每个元素看起来像这样:

{
  "aggregation_bits": "0xf7fffffffffffdfffffffffffffdfffffffffffffffffffffff7fffffffffffffff7ff",
  "data": {
    "slot": "6436981",
    "index": "8",
    "beacon_block_root": "0xf8afce2fc26df10061d641633a7256cf47ffa8793771ae83e190e72bf2c5886e",
    "source": {
      "epoch": "201154",
      "root": "0x694231a8135b3f546a6fe483ba6b467c686592f6d627aaf06b56ffbd78d75f63"
    },
    "target": {
      "epoch": "201155",
      "root": "0x2fc0d9f58cda026678d98f010fec13d202eec4ec9ae4dbd57878413a75fe22d7"
    }
  },
  "signature": "0xadb0d576ee418e37017f423e77622ce85bdb741d0e984e78df3a250c172fc67c6c7ec94e4802d6323aee8f62b7df218300f42010fe673ed85f4e06d1361336474ecfb4db39aa2bc31b31bf6fbe52c7bff769f024faa5ba3554d5ea02fe9663c3",
  "arrival": 1684067808365
}

我想做的是使用jq脚本来选择包含特定值的slot的所有元素,并将它们保存在单独的json文件中,我们称之为data_for_slot.json
让我们假设所有元素都是slot = 6436990。为此,我使用了:

jq -c '[select(.data.slot == "6436990")]' data.json > data_for_slot.json

运行一段时间后,它返回data_for_slot.json,但当我打开它检查时,我得到的是:

[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
...

我知道slot = 6436990存在于某些元素中,所以我期待一个这样的元素数组,但得到了这个。我不明白为什么它返回这样的结果,而不抛出任何错误。
我对jq脚本非常陌生,如果有人能告诉我我做错了什么,什么是正确的方法,我将不胜感激。

vojdkbi0

vojdkbi01#

jq过滤器[select(.data.slot == "6436990")]将为每个输入项创建一个数组[…]。当您使用select(…)过滤掉(大部分)输入项时,您会得到一个(大部分)空数组流。
删除数组括号(只需使用select(…)),不匹配的输入项将不会有输出。

相关问题