JOLT转换疑问:如何将嵌套对象转为指定结构数组
JOLT嵌套JSON转数组结构问题
输入JSON
{ "Ids": { "IND": { "IND-ADR": { "id": "ind-adr-id", "key": "ind1" }, "IND-PAN": { "id": "ind-pan-id", "key": "ind2" } }, "USA": { "USA-SSN": { "id": "usa-ssn-id", "key": "usa1" } } } }
期望输出
{ "Ids": [ { "country": "IND", "IdType": "IND-ADR", "id": "ind-adr-id", "key": "ind1" }, { "country": "IND", "IdType": "IND-PAN", "id": "ind-pan-id", "key": "ind2" }, { "country": "USA", "IdType": "USA-SSN", "id": "usa-ssn-id", "key": "usa1" } ] }
当前错误输出
{ "country" : [ "IND", "USA" ], "IdType" : [ "IND-ADR", "IND-PAN", "USA-SSN" ], "id" : [ "ind-adr-id", "ind-pan-id", "usa-ssn-id" ], "Key" : [ "ind1", "ind2", "usa1" ] }
当前使用的JOLT配置
[ { "operation": "shift", "spec": { "Ids": { "*": { "$": "country", "*": { "$": "IdType", "*": "&" } } } } } ]
问题分析
你当前的配置错误在于没有为每个ID条目创建独立的数组元素:直接将$(层级变量)赋值给顶级字段时,JOLT会把所有匹配的同名字段自动合并成数组,而不是把country、IdType、id、key关联到同一个对象里,最终导致各字段分离成独立数组。
修正后的JOLT配置
需要用数组索引语法Ids[],把每个国家下的每个ID类型条目映射为Ids数组中的一个独立对象,同时通过@(层级,$)语法获取上层的国家和ID类型值:
[ { "operation": "shift", "spec": { "Ids": { "*": { // 遍历每个国家(如IND、USA) "*": { // 遍历每个国家下的ID类型(如IND-ADR、IND-PAN) "@(2,$)": "Ids[].country", // 向上2层取国家名称 "@(1,$)": "Ids[].IdType", // 向上1层取ID类型名称 "id": "Ids[].id", "key": "Ids[].key" } } } } } ]
说明
Ids[]:每匹配到一个ID类型条目,就往Ids数组添加一个新元素@(2,$):回溯2层获取当前条目的国家键名@(1,$):回溯1层获取当前条目的ID类型键名- 所有字段都映射到
Ids[]下的对应属性,确保同一ID条目的字段属于同一个数组对象
内容的提问来源于stack exchange,提问作者Aditya Ashok
相关产品推荐
相关产品推荐

