如何使用JOLT将两个现有数组组合为新对象?
完善JOLT规格实现数组整合需求
首先我先明确你的输入结构:
[ { "features": [ { "featureId": 1, "feature": "feature" } ], "product": [ { "id": 1, "name": "name" } ] } ]
根据你“将两个现有数组作为元素创建一个新对象”的需求,我分两种常见场景给出完善后的JOLT规格:
场景1:保留原结构,完整映射两个数组
如果你的需求是把features和product数组完整保留为新对象的属性(本质是正确映射原结构),可以用以下JOLT规格:
[ { "operation": "shift", "spec": { "*": { // 遍历顶层数组的每个对象 "features": { "*": { // 遍历features数组的每个元素 // 直接将当前元素的所有字段映射到目标位置,比逐个字段写更简洁 "@": "[&3].features[&1]" // 如果需要精确指定保留的字段,也可以用你原来的写法: // "featureId": "[&3].features[&1].featureId", // "feature": "[&3].features[&1].feature" } }, "product": { "*": { // 遍历product数组的每个元素,逻辑和features完全一致 "@": "[&3].product[&1]" // 对应逐个字段写法: // "id": "[&3].product[&1].id", // "name": "[&3].product[&1].name" } } } } } ]
关键逻辑解释:
[&3]:指代顶层数组的索引(嵌套层级:顶层*→features→*,向上数3层就是顶层数组的位置)[&1]:指代当前数组(features/product)的元素索引,保证数组元素的顺序不会乱@:表示直接引用当前元素的所有内容,省去逐个字段映射的麻烦
场景2:将两个数组的对应元素合并为新对象
如果你的需求是把features和product数组中同索引的元素合并到一个新对象里(比如创建一个包含两类信息的组合数组),可以用以下规格:
[ { "operation": "shift", "spec": { "*": { "features": { "*": { // 将features元素放到combined数组对应位置的featureDetails字段 "@": "[&3].combined[&1].featureDetails" } }, "product": { "*": { // 将product元素放到combined数组对应位置的productDetails字段 "@": "[&3].combined[&1].productDetails" } } } } } ]
对应的输出结果:
[ { "combined": [ { "featureDetails": { "featureId": 1, "feature": "feature" }, "productDetails": { "id": 1, "name": "name" } } ] } ]
你可以根据实际需求选择对应的方案,如果还有更具体的输出结构要求,可以随时补充说明~
内容的提问来源于stack exchange,提问作者Anusha
相关产品推荐
相关产品推荐

