繁体   English   中英

如何使用jq筛选缺少的内键

[英]How to filter missing inner key by using jq

得到了这样的json输入:

[ 
{
    "dimensions": "helloworld",
    "metrics": "sum(is_error)",
    "values": {
      "timestamp": 1558322460000,
      "value": "0.0"
    }
  },
  {
    "dimensions": "helloworld",
    "metrics": "sum(is_error)",
    "values": {
      "timestamp": 1558322160000,
      "value": "0.0"
    }
  },
  {
    "dimensions": "helloworld",
    "metrics": "sum(is_error)",
    "values": "3423.25"
  }
]

第三个对象上没有时间戳。 我怎么能返回所有只带有时间戳的对象。 如下所示:

[ 
{
    "dimensions": "helloworld",
    "metrics": "sum(is_error)",
    "values": {
      "timestamp": 1558322460000,
      "value": "0.0"
    }
  },
  {
    "dimensions": "helloworld",
    "metrics": "sum(is_error)",
    "values": {
      "timestamp": 1558322160000,
      "value": "0.0"
    }
  }
]

提前谢谢了。

干杯,文森特

map( select ( .values | has("timestamp")? ))

这是一个替代解决方案,使用针对JSON的步行路径unix工具: jtc

bash $ <file.json jtc -w'<timestamp>l:[-2]' -j
[
   {
      "dimensions": "helloworld",
      "metrics": "sum(is_error)",
      "values": {
         "timestamp": 1558322460000,
         "value": "0.0"
      }
   },
   {
      "dimensions": "helloworld",
      "metrics": "sum(is_error)",
      "values": {
         "timestamp": 1558322160000,
         "value": "0.0"
      }
   }
]
bash $ 
  • 它找到每个(所有)标签timestamp ,然后从找到的json条目上移两级,并打印找到的Json元素。 -j将所有打印的走行包装回数组。

PS>披露:我是jtc工具的创建者

工作示例: [ .[] | select (.values | has("timestamp")?) ] [ .[] | select (.values | has("timestamp")?) ]

https://jqplay.org/s/n5jsRsPMhW

或替代: [ .[] | select (.values.timestamp?) ] [ .[] | select (.values.timestamp?) ]

https://jqplay.org/s/HRWV44YgUp

PS 是不正确的,因为在[。]之后您分别处理每个项目,而不是数组。 因此,“地图”功能是不必要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM