如何使用Jolt将JSON数组规范化为属性键值结构?
Jolt JSON数组规范化解决方案
示例源JSON
[ { "itemNo": "ITEM001", "name": "笔记本电脑", "price": 5999, "brand": "XX品牌" }, { "itemNo": "ITEM002", "category": "办公耗材", "stock": 100 } ]
期望输出JSON
[ { "id": "ITEM001", "attribute": "itemNo", "value": "ITEM001" }, { "id": "ITEM001", "attribute": "name", "value": "笔记本电脑" }, { "id": "ITEM001", "attribute": "price", "value": 5999 }, { "id": "ITEM001", "attribute": "brand", "value": "XX品牌" }, { "id": "ITEM002", "attribute": "itemNo", "value": "ITEM002" }, { "id": "ITEM002", "attribute": "category", "value": "办公耗材" }, { "id": "ITEM002", "attribute": "stock", "value": 100 } ]
正确的Jolt Shift规范
[ { "operation": "shift", "spec": { "*": { "*": { "@(2,itemNo)": "[#2].id", "$": "[#2].attribute", "@": "[#2].value" } } } }, { "operation": "shift", "spec": { "*": "[]" } } ]
规范说明
第一个Shift操作:
- 外层
*遍历源数组里的每个物品对象 - 内层
*遍历当前物品的所有属性 @(2,itemNo):向上回溯2层拿到当前物品的itemNo值,作为新对象的id$:取当前遍历的属性名,赋值给attribute字段@:取当前属性的对应值,赋值给value字段[#2]:用外层数组的索引做临时分组键,保证同一物品的属性对象归为一组
- 外层
第二个Shift操作:
- 把分组后的多维数组平铺成一维数组,得到最终需要的结构
内容的提问来源于stack exchange,提问作者Katja Bürger
相关产品推荐
相关产品推荐

