如何使用JOLT对同前缀JSON属性分组并忽略空值
使用JOLT工具分组相同前缀JSON属性并忽略NULL值
输入JSON
{ "Project": "ABC", "Project Code": "ABC", "Image 1 URL": null, "Image 1 Description": null, "Image 2 URL": "https://test.com", "Image 2 Description": "description 2", "Image 3 URL": null, "Image 3 Description": null, "Image 4 URL": "https://test.com", "Image 4 Description": "description 4" }
期望输出JSON
{ "projectName":"ABC", "projectCode":"ABC", "media":{ "images":[ { "name":"Image 2", "url":"https://test.com", "description":"description 2" }, { "name":"Image 4", "url":"https://test.com", "description":"description 4" } ] } }
JOLT转换规范
以下是实现需求的JOLT转换规则:
[ { "operation": "shift", "spec": { "Project": "projectName", "Project Code": "projectCode", "Image * URL": { "@(1,Image &1 Description)": "media.images[&1].description", "@": "media.images[&1].url", "$(0,1)": "media.images[&1].name" } } }, { "operation": "modify-overwrite-beta", "spec": { "media": { "images": "=recursivelySquashNulls" } } }, { "operation": "shift", "spec": { "projectName": "projectName", "projectCode": "projectCode", "media": { "images": { "*": { "url": { "@2": "media.images[]" } } } } } } ]
规则说明
第一步Shift操作:
- 直接映射顶层字段
Project和Project Code到目标字段名; - 匹配
Image * URL格式的字段,通过&1提取序号,关联对应的描述字段,同时生成每个图片的name、url、description属性,存入media.images数组对应索引位置。
- 直接映射顶层字段
Modify操作:
- 调用
recursivelySquashNulls函数,移除所有值为NULL的字段以及空对象,把那些URL和描述全为NULL的图片条目清空。
- 调用
第二步Shift操作:
- 重新过滤
images数组,只保留包含url字段的有效条目,确保最终数组里只有非空的图片对象。
- 重新过滤
内容的提问来源于stack exchange,提问作者pramod wadappi
相关产品推荐
相关产品推荐

