请求修正Jolt转换规则,生成指定格式的URL列表
调整Jolt规则生成指定URL列表格式
问题说明
现有JSON输入包含特征列表和输入参数,当前Jolt转换规则生成的是嵌套数组形式的URL,无法得到预期的扁平化URL列表格式,需要调整规则实现目标输出。
输入数据
[ { "domain-specific-features": { "features": [ { "id": 3581, "name": "search-hello" }, { "id": 3582, "name": "search-rmn" }, { "id": 3864, "name": "search-email" }, { "id": 3865, "name": "search-sr" }, { "id": 3866, "name": "search-order" }, { "id": 3867, "name": "search-disconnected-customer" }, { "id": 3868, "name": "search-customer-id" }, { "id": 3869, "name": "search-customer-number" } ] } }, { "input": { "mobile-number": "1234567890", "pattern": "search" } } ]
当前使用的Jolt规则
[ { "operation": "shift", "spec": { "*": { "domain-specific-features": { "resultStatus": "resultStatus", "features": { "*": "mobility\\-callerId\\-featureList[].feature" } }, "input": "input" } } }, { "operation": "shift", "spec": { "resultStatus": "resultStatus", "mobility\\-callerId\\-featureList": { "*": { "@(2,input)": { "mobile-number": "mobility\\-callerId\\-featureList[&2].mobileNumber", "pattern": "mobility\\-callerId\\-featureList[&2].pattern" }, "*": "mobility\\-callerId\\-featureList[&1].&" } } } }, { "operation": "modify-overwrite-beta", "spec": { "mobility\\-call*rId\\-featureList": { "*": { "fea*ure": { "mobility\\-callerId\\-featureList\\-url": "=concat('/epsp-pattern/',@(2,pattern),'/',@(1,name),'?', 'mobile-number=', @(2,mobileNumber), '&appPatternFeatureId=', @(1,id))" } } } } }, { "operation": "shift", "spec": { "resultStatus": { "#NO_RECORD": "resultStatus.status", "#No records found": "resultStatus.message", "#7000": "resultStatus.code" }, "mobility\\-callerId\\-featureList": { "*": { "feature": { "mobility\\-callerId\\-featureList\\-url": "mobility\\-callerId\\-featureList[&2].&" } } } } } ]
预期输出
{ "mobility-callerId-featureList" : ["/epsp-pattern/search/search-hello?mobile-number=1234567890&appPatternFeatureId=3581", "/epsp-pattern/search/search-rmn?mobile-number=1234567890&appPatternFeatureId=3582", "/epsp-pattern/search/search-email?mobile-number=1234567890&appPatternFeatureId=3864", "/epsp-pattern/search/search-sr?mobile-number=1234567890&appPatternFeatureId=3865", "/epsp-pattern/search/search-order?mobile-number=1234567890&appPatternFeatureId=3866", "/epsp-pattern/search/search-disconnected-customer?mobile-number=1234567890&appPatternFeatureId=3867", "/epsp-pattern/search/search-customer-id?mobile-number=1234567890&appPatternFeatureId=3868", "/epsp-pattern/search/search-customer-number?mobile-number=1234567890&appPatternFeatureId=3869"] }
调整后的Jolt规则
[ // 提取输入参数和特征列表到根节点,简化后续引用路径 { "operation": "shift", "spec": { "0": { "domain-specific-features": { "features": "features" } }, "1": { "input": "input" } } }, // 为每个特征关联输入参数,构建临时结构 { "operation": "shift", "spec": { "features": { "*": { "@(2,input.pattern)": "temp[&1].pattern", "@(2,input.mobile-number)": "temp[&1].mobileNumber", "id": "temp[&1].id", "name": "temp[&1].name" } } } }, // 拼接每个特征对应的完整URL { "operation": "modify-overwrite-beta", "spec": { "temp": { "*": { "url": "=concat('/epsp-pattern/',@(1,pattern),'/',@(1,name),'?mobile-number=',@(1,mobileNumber),'&appPatternFeatureId=',@(1,id))" } } } }, // 提取所有URL组成目标数组,丢弃临时结构 { "operation": "shift", "spec": { "temp": { "*": { "url": "mobility-callerId-featureList[]" } } } } ]
规则说明
原规则的问题在于将URL嵌套在多层对象结构中,最终未能正确提取为扁平化数组元素。调整后的规则通过四步实现目标:
- 先把输入参数和特征列表提取到根节点,避免深层引用的复杂路径;
- 将每个特征与输入参数关联,生成包含所有必要字段的临时结构;
- 为每个临时结构拼接完整的URL字符串;
- 提取所有URL直接组成目标数组,得到预期的扁平化列表格式。
内容的提问来源于stack exchange,提问作者Raj Gandhal
相关产品推荐
相关产品推荐

