[英]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.