如何使用Jolt Spec过滤JSON中指定folder值的对象?
Jolt筛选特定folder值的JSON对象解决方案
问题场景
有一组JSON数组数据,需要筛选出folder字段值为/folder-parent/raw/new、/folder-parent/raw/old、/folder-parent/changed-per-record的对象。
原始JSON数据
[ { "field1": "xyz", "field2": "mno", "res1": "pqrs", "folder": "/folder-parent/raw/new" }, { "field1": "xyz1", "field2": "mno1", "res1": "pqrs1", "folder": "/folder-parent/raw/old" }, { "field1": "xyz1", "field2": "mno1", "res1": "pqrs1", "folder": "/folder-parent/changed-per-record" }, { "field1": "xyz1", "field2": "mno1", "res1": "pqrs1", "folder": "/folder-parent/something-else" }, { "field1": "xyz1", "field2": "mno1", "res1": "pqrs1", "folder": "/folder-parent/something/other-thing" } ]
错误的Jolt Spec
之前尝试的Spec存在逻辑、语法及拼写问题,无法生效:
[ { "operation": "shift", "spec": { "*": { "folder": { "*": { "filter": "@(2, folder)=== '/folder-parent/raw/new' && @(2, folder)=== '/folder-parent/raw/old' && @(2, folder)=== '/folder-parent/change-per-record'", "": "@" } } } } } ]
正确的Jolt Spec
使用shift操作配合正则匹配目标路径,实现精准筛选:
[ { "operation": "shift", "spec": { "*": { "folder": { "/folder-parent/raw/new|/folder-parent/raw/old|/folder-parent/changed-per-record": { "@2": "[]" } } } } } ]
错误原因说明
- 逻辑运算符错误:原Spec使用
&&(逻辑与),但一个folder值不可能同时等于三个不同路径,应改为|(正则或)匹配任意一个目标路径。 - 语法写法错误:Jolt的
shift操作中,条件判断需通过匹配键值触发,而非直接写表达式;@2表示向上回溯两层,获取当前数组元素的完整对象。 - 拼写错误:原Spec中把
changed-per-record误写为change-per-record,导致匹配失败。
输出结果
执行正确的Jolt Spec后,输出筛选后的JSON数组:
[ { "field1": "xyz", "field2": "mno", "res1": "pqrs", "folder": "/folder-parent/raw/new" }, { "field1": "xyz1", "field2": "mno1", "res1": "pqrs1", "folder": "/folder-parent/raw/old" }, { "field1": "xyz1", "field2": "mno1", "res1": "pqrs1", "folder": "/folder-parent/changed-per-record" } ]
内容的提问来源于stack exchange,提问作者Dot Net Dev 19
相关产品推荐
相关产品推荐

