得到了这样的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"
}
}
]
非常感谢。
干杯, 文森特
答案 0 :(得分:3)
map( select ( .values | has("timestamp")? ))
答案 1 :(得分:2)
这是一个替代解决方案,使用针对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条目上移2个级别并打印找到的Json元素。 -j
将所有打印的走行包装回阵列。 PS>披露:我是jtc
工具的创建者
答案 2 :(得分:1)
工作示例:
[ .[] | select (.values | has("timestamp")?) ]
https://jqplay.org/s/n5jsRsPMhW
或替代方法:
[ .[] | select (.values.timestamp?) ]
https://jqplay.org/s/HRWV44YgUp
P.S。 This one是不正确的,因为在。[]之后,您分别处理每个项目,而不是数组。因此不需要“地图”功能。