Jolt如何实现匹配条件时将字符串属性转数组(属性名动态未知)
Jolt动态键值分割转换解决方案
可直接使用的完整Jolt Spec
[ { "operation": "shift", "spec": { "*": { "@(1,stringValue)": "@(1,attributeKey)" } } }, { "operation": "modify-overwrite-beta", "spec": { "*": "=split('¤', @(1,&))" } }, { "operation": "modify-overwrite-beta", "spec": { "*": "=ifElse(equals(size(@(1,&)), 1), firstElement(@(1,&)), @(1,&))" } } ]
转换逻辑说明
- 第一步
shift操作:遍历输入数组的所有元素,将每个元素的attributeKey作为输出根节点的键,对应的stringValue作为值,完成从对象数组到动态键对象的映射,不需要提前预知任何attributeKey的取值。 - 第二步
modify-overwrite-beta操作:用通配符*匹配根节点下所有动态生成的键,对每个值执行split函数按字符¤分割。此时所有值都会被处理为数组类型,不含¤的值会被处理为仅包含原始字符串的单元素数组。 - 第三步
modify-overwrite-beta操作:对每个分割后的数组做判断:如果数组长度为1,就取数组的第一个元素作为最终值(还原为字符串类型);如果数组长度大于1,就保留原数组,完全符合转换规则要求。
验证结果
对你提供的示例输入执行上述Spec后,输出结果和要求完全一致:
{ "foo": "fooValue", "bar": ["barValue1", "barValue2"] }
内容的提问来源于stack exchange,提问作者Abdelghani Roussi
相关产品推荐
相关产品推荐

