请求提供JOLT规范:字段值转字段名(重复值场景)
JOLT适配重复字段值作为键的转换方案
满足你需求的JOLT规范
以下规范可生成你期望的输出结构(注意:JSON语法要求对象键必须唯一,严格解析时重复键会被后者覆盖,这是JSON本身的限制):
[ { "operation": "shift", "spec": { "action": { "Success": "action.Success", "records": { "*": { "Id": { "@(2,SubscriptionID)": "action.records.&" } } }, "type": "action.type" } } }, { "operation": "modify-overwrite-beta", "spec": { "action": { "records": { "*": { "$": "SubscriptionID" } } } } } ]
规范说明
- Shift操作:遍历
records数组内的每个元素,将SubscriptionID的值映射到以Id值为键的字段下。此时重复键会生成数组,后续操作会调整为你需要的结构。 - Modify操作:把每个键对应的值重新包装为
{"SubscriptionID": 值}的格式,最终生成你给出的输出结构。
更合规的替代方案(推荐)
由于JSON不允许重复键,实际业务中更合理的方式是将重复键对应的值设为数组,避免解析时的覆盖问题。对应的JOLT规范如下:
[ { "operation": "shift", "spec": { "action": { "Success": "action.Success", "records": { "*": { "SubscriptionID": "action.records.@(1,Id).[]" } }, "type": "action.type" } } }, { "operation": "modify-overwrite-beta", "spec": { "action": { "records": { "*": { "*": { "$": "SubscriptionID" } } } } } } ]
生成的输出为:
{ "action": { "Success": true, "records": { "Test_abc": [ {"SubscriptionID": "ID_1"}, {"SubscriptionID": "ID_2"} ], "Test_xyz": {"SubscriptionID": "ID_3"} }, "type": "update" } }
内容的提问来源于stack exchange,提问作者TibcoDeveloper1003
相关产品推荐
相关产品推荐

