首页 > 解决方案 > 如何使用 jq 重新格式化 json 中的特定数据

问题描述

我是 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
}

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

非常感谢!

标签: jsonjqreformat

解决方案


选择与特定值之一匹配的hex并更新aircraft以仅保留那些。

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

在线演示


推荐阅读