使用JOLT将嵌套数组对象结构转换为单层对象数组
JOLT转换数组嵌套结构为纯对象数组解决方案
我们需要将JSON中数组嵌套数组的混合结构,通过JOLT转换为仅包含对象的数组结构,具体输入输出示例如下:
输入JSON
{ "type": "configuration/entityTypes/Account", "attributes": { "Address": [ { "value": { "AddressLine1": [ { "value": "3169 N 5TH ST" }, [ { "value": "3169 N 5TH STREET" } ] ], "StateProvince": [ { "value": "PA" }, [ { "value": "PA" } ] ] } } ] } }
期望输出JSON
{ "type": "configuration/entityTypes/Account", "attributes": { "Address": [ { "value": { "AddressLine1": [ { "value": "3169 N 5TH ST" }, { "value": "3169 N 5TH STREET" } ], "StateProvince": [ { "value": "PA" }, { "value": "PA" } ] } } ] } }
可行JOLT转换规范
[ { "operation": "shift", "spec": { "type": "type", "attributes": { "Address": { "*": { "value": { "*": { "*": { "@(0,value)": "attributes.Address[&3].value.&2[&1]", "@(0,[0].value)": "attributes.Address[&3].value.&2[&1]" } } } } } } } }, { "operation": "cardinality", "spec": { "attributes": { "Address": { "*": { "value": { "*": { "*": "ONE" } } } } } } } ]
转换逻辑说明
- Shift操作:
- 遍历
attributes.Address[].value下的所有子字段(如AddressLine1、StateProvince),处理每个数组元素 - 若元素是普通对象,直接提取其内容;若元素是嵌套数组,则提取数组内的第一个对象
- 通过
&3、&2、&1占位符维持原层级结构,确保数据被放到正确的位置
- 遍历
- Cardinality操作:
- 由于Shift操作可能会对同一数组位置生成重复值,使用
ONE规则确保每个索引仅保留一个有效对象,去除重复项
- 由于Shift操作可能会对同一数组位置生成重复值,使用
内容的提问来源于stack exchange,提问作者pranitha prakash
相关产品推荐
相关产品推荐

