使用JOLT实现JSON转换:将指定字段复制到数组每个对象
JOLT转换解决方案:将Owner字段批量插入数组对象中
输入JSON
{ "AAA": { "Product": "Product A", "Owner": { "Name": "NAME SURNAME", "Age": "20", "ID": [ { "IDType": "CPF", "IDNumber": "0000000000000" } ], "Contact": { "Email": "test@test.com", "Phone": "1111111111", "Add": { "Add1": "aaaa", "Add2": "bbbb", "City": "city" } } } }, "BBB": [ { "Field 1": "F1", "Field 2": "F2", "Field 3": { "F31": "F3.1", "F32": "F3.2" } }, { "Field 1": "F1", "Field 2": "F2", "Field 3": { "F31": "F3.1", "F32": "F3.2" } }, { "Field 1": "F1", "Field 2": "F2", "Field 3": { "F31": "F3.1", "F32": "F3.2" } } ] }
期望输出JSON
{ "AAA": { "Product": "Product A", "Owner": { "Name": "NAME SURNAME", "Age": "20", "ID": [ { "IDType": "CPF", "IDNumber": "0000000000000" } ], "Contact": { "Email": "test@test.com", "Phone": "1111111111", "Add": { "Add1": "aaaa", "Add2": "bbbb", "City": "city" } } } }, "BBB": [ { "Field 1": "F1", "Field 2": "F2", "Field 3": { "F31": "F3.1", "F32": "F3.2", "New Field": { "Name": "NAME SURNAME", "Id": { "IDType": "CPF", "IDNumber": "0000000000000" }, "Contact": { "Email": "test@test.com", "Phone": "1111111111", "Add": { "Add1": "aaaa", "Add2": "bbbb", "City": "city" } } } } }, { "Field 1": "F1", "Field 2": "F2", "Field 3": { "F31": "F3.1", "F32": "F3.2", "New Field": { "Name": "NAME SURNAME", "Id": { "IDType": "CPF", "IDNumber": "0000000000000" }, "Contact": { "Email": "test@test.com", "Phone": "1111111111", "Add": { "Add1": "aaaa", "Add2": "bbbb", "City": "city" } } } } }, { "Field 1": "F1", "Field 2": "F2", "Field 3": { "F31": "F3.1", "F32": "F3.2", "New Field": { "Name": "NAME SURNAME", "Id": { "IDType": "CPF", "IDNumber": "0000000000000" }, "Contact": { "Email": "test@test.com", "Phone": "1111111111", "Add": { "Add1": "aaaa", "Add2": "bbbb", "City": "city" } } } } } ] }
JOLT转换规范
[ { "operation": "shift", "spec": { "*": "&", "BBB": { "*": { "*": "BBB[&1].&", "Field 3": { "*": "BBB[&2].Field 3.&" } } } } }, { "operation": "shift", "spec": { "*": "&", "AAA": { "Owner": { "Name": "BBB[*].Field 3.New Field.Name", "ID": { "*": { "IDType": "BBB[&4].Field 3.New Field.Id.IDType", "IDNumber": "BBB[&4].Field 3.New Field.Id.IDNumber" } }, "Contact": "BBB[*].Field 3.New Field.Contact" } } } } ]
转换逻辑说明
第一步:保留原有结构
通过shift操作完整保留输入中的所有字段,包括AAA的全部内容,以及BBB数组每个元素的Field 1、Field 2和Field 3内的原有字段。BBB[&1]中的&1对应数组元素的索引,确保每个元素的原有字段映射到正确位置。第二步:批量插入New Field
针对AAA.Owner的字段,用BBB[*]遍历数组所有元素,将字段复制到每个元素的Field 3.New Field路径下:- 直接映射
Name字段到目标路径; - 处理
ID数组时,遍历数组元素(输入中仅一个),将其转换为Id对象(匹配输出的键名要求); - 直接复制整个
Contact对象到目标路径; &4是相对路径索引,从ID数组元素位置向上追溯4层到BBB根层级,确保所有BBB元素都能获取到Owner的ID信息。
- 直接映射
内容的提问来源于stack exchange,提问作者Mathias
相关产品推荐
相关产品推荐

