使用Jolt过滤掉value为{"nil":null}的JSON对象
筛选Jolt中value为数值类型的JSON对象
输入JSON
[{ "time": "2014-10-31T01:59:59.000+10:00", "value": { "nil": null }, "metadata": { "TVPMeasurementMetadata": { "qualifier": { "title": null, "href": null } } }, "longitude": "115.1248985", "latitude": "-33.963617", "gathered_time": "1685662804091" }, { "time": "2014-11-30T02:00:00.000+10:00", "value": { "nil": null }, "metadata": { "TVPMeasurementMetadata": { "qualifier": { "title": null, "href": null } } }, "longitude": "115.1248985", "latitude": "-33.963617", "gathered_time": "1685662804091" }, { "time": "2014-12-10T02:00:00.000+10:00", "value": 83.939, "metadata": null, "longitude": "115.1248985", "latitude": "-33.963617", "gathered_time": "1685662804091" }, { "time": "2014-12-11T02:00:00.000+10:00", "value": 84.089, "metadata": null, "longitude": "115.1248985", "latitude": "-33.963617", "gathered_time": "1685662804091" } ]
期望输出
[{ "time" : "2014-12-10T02:00:00.000+10:00", "value" : 83.939, "metadata" : null, "longitude" : "115.1248985", "latitude" : "-33.963617", "gathered_time" : "1685662804091" }, { "time" : "2014-12-11T02:00:00.000+10:00", "value" : 84.089, "metadata" : null, "longitude" : "115.1248985", "latitude" : "-33.963617", "gathered_time" : "1685662804091" } ]
Jolt解决方案
通过modify-overwrite-beta标记有效元素,再用shift筛选保留,最后清理临时字段:
[ { "operation": "modify-overwrite-beta", "spec": { "*": { "isValidValue": "=not(isObject(@(1,value)))" } } }, { "operation": "shift", "spec": { "*": { "isValidValue": { "true": { "@2": "" } } } } }, { "operation": "remove", "spec": { "*": { "isValidValue": "" } } } ]
步骤说明
- 标记有效元素:给每个数组元素添加
isValidValue字段,判断value是否为非对象类型(即数值),符合条件则赋值为true。 - 筛选保留:通过
shift操作,仅保留isValidValue为true的元素,@2用于回溯获取当前数组元素的完整内容。 - 清理临时字段:用
remove操作删除临时添加的isValidValue字段,还原原始数据结构。
内容的提问来源于stack exchange,提问作者Drew Nicolette
相关产品推荐
相关产品推荐

