如何用Jolt Shift Transformation提取多层JSON的所有foo数组?
Jolt转换:提取所有层级的foo数组到统一数组
需求:从结构层级未知的JSON数据中,提取所有层级下的foo数组,生成一个包含这些foo数组对象的数组,每个数组元素为{"foo": [原foo数组内容]}的格式。
输入JSON
{ "id": 1, "item": [ { "id": "1_1", "item": [ { "id": "1_1_2", "foo": [ { "nn": "cc", "vvv": "2022-08-30T06:44:24.943Z", "mmm": "oo" }, { "nn": "ss", "vvv": "rr", "mmm": "oo" }, { "nn": "ii", "vvv": "rr", "mmm": "oo" }, { "nn": "uu", "vvv": "kk", "mmm": "oo" }, { "nn": "pp", "vvv": "aaa", "mmm": "oo" }, { "nn": "bb", "vvv": "tt", "mmm": "oo" }, { "nn": "ff", "vvv": "tt", "mmm": "oo" }, { "nn": "ff", "vvv": "tt", "mmm": "oo" }, { "nn": "pp", "vvv": "yy", "mmm": "oo" } ] } ], "foo": [ { "nn": "cc", "vvv": "ww", "mmm": "oo" }, { "nn": "ss", "vvv": "rr", "mmm": "oo" }, { "nn": "ii", "vvv": "rr", "mmm": "oo" }, { "nn": "uu", "vvv": "kk", "mmm": "oo" }, { "nn": "pp", "vvv": "aaa", "mmm": "oo" }, { "nn": "bb", "vvv": "tt", "mmm": "oo" }, { "nn": "d", "vvv": "tt", "mmm": "oo" }, { "nn": "pp", "vvv": "yy", "mmm": "oo" } ] }, { "id": "1_2", "item": [ { "id": "1_2_1", "foo": [ { "nn": "cc", "vvv": "ww", "mmm": "oo" }, { "nn": "ss", "vvv": "rr", "mmm": "oo" }, { "nn": "ii", "vvv": "rr", "mmm": "oo" }, { "nn": "uu", "vvv": "kk", "mmm": "oo" }, { "nn": "pp", "vvv": "aaa", "mmm": "oo" }, { "nn": "bb", "vvv": "tt", "mmm": "oo" }, { "nn": "bb_ee4d6bf4-1081-468a-b7b1-5445333dfab2", "vvv": "tt", "mmm": "oo" }, { "nn": "pp", "vvv": "yy", "mmm": "oo" } ] } ], "foo": [ { "nn": "cc", "vvv": "ww", "mmm": "oo" }, { "nn": "ss", "vvv": "rr", "mmm": "oo" }, { "nn": "ii", "vvv": "rr", "mmm": "oo" }, { "nn": "uu", "vvv": "kk", "mmm": "oo" }, { "nn": "pp", "vvv": "aaa", "mmm": "oo" }, { "nn": "bb", "vvv": "tt", "mmm": "oo" }, { "nn": "d", "vvv": "tt", "mmm": "oo" }, { "nn": "pp", "vvv": "yy", "mmm": "oo" } ] } ] }
期望输出JSON
[ { "foo": [ { "nn": "cc", "vvv": "ww", "mmm": "oo" }, { "nn": "ss", "vvv": "rr", "mmm": "oo" }, { "nn": "ii", "vvv": "rr", "mmm": "oo" }, { "nn": "uu", "vvv": "kk", "mmm": "oo" }, { "nn": "pp", "vvv": "aaa", "mmm": "oo" }, { "nn": "bb", "vvv": "tt", "mmm": "oo" }, { "nn": "d", "vvv": "tt", "mmm": "oo" }, { "nn": "pp", "vvv": "yy", "mmm": "oo" } ] }, { "foo": [ { "nn": "cc", "vvv": "2022-08-30T06:44:24.943Z", "mmm": "oo" }, { "nn": "ss", "vvv": "rr", "mmm": "oo" }, { "nn": "ii", "vvv": "rr", "mmm": "oo" }, { "nn": "uu", "vvv": "kk", "mmm": "oo" }, { "nn": "pp", "vvv": "aaa", "mmm": "oo" }, { "nn": "bb", "vvv": "tt", "mmm": "oo" }, { "nn": "ff", "vvv": "tt", "mmm": "oo" }, { "nn": "ff", "vvv": "tt", "mmm": "oo" }, { "nn": "pp", "vvv": "yy", "mmm": "oo" } ] }, { "foo": [ { "nn": "cc", "vvv": "ww", "mmm": "oo" }, { "nn": "ss", "vvv": "rr", "mmm": "oo" }, { "nn": "ii", "vvv": "rr", "mmm": "oo" }, { "nn": "uu", "vvv": "kk", "mmm": "oo" }, { "nn": "pp", "vvv": "aaa", "mmm": "oo" }, { "nn": "bb", "vvv": "tt", "mmm": "oo" }, { "nn": "d", "vvv": "tt", "mmm": "oo" }, { "nn": "pp", "vvv": "yy", "mmm": "oo" } ] }, { "foo": [ { "nn": "cc", "vvv": "ww", "mmm": "oo" }, { "nn": "ss", "vvv": "rr", "mmm": "oo" }, { "nn": "ii", "vvv": "rr", "mmm": "oo" }, { "nn": "uu", "vvv": "kk", "mmm": "oo" }, { "nn": "pp", "vvv": "aaa", "mmm": "oo" }, { "nn": "bb", "vvv": "tt", "mmm": "oo" }, { "nn": "bb_ee4d6bf4-1081-468a-b7b1-5445333dfab2", "vvv": "tt", "mmm": "oo" }, { "nn": "pp", "vvv": "yy", "mmm": "oo" } ] } ]
Jolt转换配置
[ { "operation": "shift", "spec": { "**": { "foo": { "@": "[].foo" } } } } ]
配置说明
**:通配符,匹配JSON结构中任意深度的所有键路径,确保遍历到每一层级的节点"foo": { "@": "[].foo" }:当匹配到名为foo的键时,将其对应的值(即整个foo数组)映射到根数组的新元素中,[]会自动为每个匹配到的foo创建独立的数组元素,每个元素保持{"foo": [...]}的格式
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

