如何用Jolt拆分URL并提取指定片段生成目标JSON结构?
Jolt转换配置修正方案
输入JSON
{ "mobility-search-featureList": [ { "mobility-search-featureList-url": "/epsp-pattern/search/search-options?mobile-number=8877887788&appPatternFeatureId=3581" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-rmn?mobile-number=8877887788&appPatternFeatureId=3582" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-email?mobile-number=8877887788&appPatternFeatureId=3864" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-sr?mobile-number=8877887788&appPatternFeatureId=3865" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-order?mobile-number=8877887788&appPatternFeatureId=3866" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-disconnected-customer?mobile-number=8877887788&appPatternFeatureId=3867" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-customer-id?mobile-number=8877887788&appPatternFeatureId=3868" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-customer-number?mobile-number=8877887788&appPatternFeatureId=3869" } ] }
期望输出JSON
提取每个mobility-search-featureList-url中问号前的最后一段作为name字段,同时保留原URL:
{ "mobility-search-featureList": [ { "mobility-search-featureList-url": "/epsp-pattern/search/search-options?mobile-number=8877887788&appPatternFeatureId=3581", "name": "search-options" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-rmn?mobile-number=8877887788&appPatternFeatureId=3582", "name": "search-rmn" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-email?mobile-number=8877887788&appPatternFeatureId=3864", "name": "search-email" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-sr?mobile-number=8877887788&appPatternFeatureId=3865", "name": "search-sr" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-order?mobile-number=8877887788&appPatternFeatureId=3866", "name": "search-order" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-disconnected-customer?mobile-number=8877887788&appPatternFeatureId=3867", "name": "search-disconnected-customer" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-customer-id?mobile-number=8877887788&appPatternFeatureId=3868", "name": "search-customer-id" }, { "mobility-search-featureList-url": "/epsp-pattern/search/search-customer-number?mobile-number=8877887788&appPatternFeatureId=3869", "name": "search-customer-number" } ] }
当前使用的错误转换规则
[ { "operation": "modify-overwrite-beta", "spec": { "name": { "*": { "mobility-search-featureList-url": "=split('/', @(1))" } } } }, { "operation": "modify-overwrite-beta", "spec": { "name": { "\*": "=lastElement(@(1))" } } }, { "operation": "shift", "spec": { "name": "name" } } ]
正确的Jolt转换配置
[ { "operation": "modify-overwrite-beta", "spec": { "mobility-search-featureList": { "*": { // 先按?拆分,提取问号前的路径部分 "urlPart": "=split('\\?', @(1,mobility-search-featureList-url))[0]", // 再按/拆分路径,取最后一段作为name "name": "=lastElement(split('/', @(1,urlPart)))" } } } }, { "operation": "shift", "spec": { "mobility-search-featureList": { "*": { "mobility-search-featureList-url": "mobility-search-featureList[&1].mobility-search-featureList-url", "name": "mobility-search-featureList[&1].name" } } } } ]
配置说明
- modify-overwrite-beta 操作:遍历目标数组的每个元素,先拆分URL过滤掉问号后的参数,再从纯路径中提取最后一段作为
name字段。 - shift 操作:将原URL和生成的
name字段映射回原数组结构,确保输出格式与预期一致。
原错误配置问题:
- 未正确定位到
mobility-search-featureList数组节点,错误操作了不存在的name节点; - 拆分逻辑未处理问号后的参数,导致提取内容包含多余部分;
- 最终的shift操作无法还原原数组结构。
内容的提问来源于stack exchange,提问作者Raj Gandhal
相关产品推荐
相关产品推荐

