如何使用jq从json重新格式化特定数据

如何使用jq从json重新格式化特定数据,json,jq,reformat,Json,Jq,Reformat,我是json新手,希望从特定的json中提取数据(块)。我试图找到关于如何与jq合作的信息,但到目前为止,我似乎无法得到我想要的 我的json: { "now" : 1589987097.9, "aircraft" : [ { "mlat" : [], "rssi" : -26.2, "track" : 319, "speed" : 354, "messages" : 16,

我是json新手,希望从特定的json中提取数据(块)。我试图找到关于如何与jq合作的信息,但到目前为止,我似乎无法得到我想要的

我的json:

{
   "now" : 1589987097.9,
   "aircraft" : [
      {
         "mlat" : [],
         "rssi" : -26.2,
         "track" : 319,
         "speed" : 354,
         "messages" : 16,
         "seen" : 0.7,
         "altitude" : 38000,
         "vert_rate" : 0,
         "hex" : "44b5b4",
         "tisb" : []
      },
      {
         "squawk" : "6220",
         "altitude" : 675,
         "seen" : 1.1,
         "messages" : 7220,
         "tisb" : [],
         "hex" : "484a95",
         "mlat" : [],
         "rssi" : -22
      },
      {
         "hex" : "484846",
         "tisb" : [],
         "messages" : 20,
         "speed" : 89,
         "seen" : 0.4,
         "squawk" : "7000",
         "altitude" : 500,
         "rssi" : -23.7,
         "track" : 185,
         "mlat" : []
      },
      {
         "category" : "B1",
         "mlat" : [],
         "rssi" : -24.3,
         "flight" : "ZSGBX   ",
         "altitude" : 3050,
         "squawk" : "7000",
         "seen" : 16.8,
         "messages" : 37,
         "tisb" : [],
         "hex" : "00901a"
      }
 ],
   "messages" : 35857757
} 
我想重新格式化这个json,只包含包含特定十六进制值的“块”

例如,我希望我的输出包含44b5b4和00901a:


{
   "now" : 1589987097.9,
   "aircraft" : [
      {
         "mlat" : [],
         "rssi" : -26.2,
         "track" : 319,
         "speed" : 354,
         "messages" : 16,
         "seen" : 0.7,
         "altitude" : 38000,
         "vert_rate" : 0,
         "hex" : "44b5b4",
         "tisb" : []
      },
      {
         "category" : "B1",
         "mlat" : [],
         "rssi" : -24.3,
         "flight" : "ZSGBX   ",
         "altitude" : 3050,
         "squawk" : "7000",
         "seen" : 16.8,
         "messages" : 37,
         "tisb" : [],
         "hex" : "00901a"
      }
 ],
   "messages" : 35857757
}

有人能告诉我如何删除所有没有这两个十六进制标识符但仍然保持相同json结构的项吗

非常感谢

选择其
hex
与其中一个特定值匹配的块,并更新
飞机
,只保留这些块

.aircraft |= map(select(.hex | IN("44b5b4", "00901a")))

在阵列
飞机上执行
选择()
,仅匹配所需的十六进制值。
map()
函数将输入整个数组,选择操作的结果(即基于
.hex
值过滤对象)将更新回原始数组,其余字段保持不变

jq '.aircraft |= map(select(.hex == "44b5b4" or .hex == "00901a"))' json