如何用Jolt将含对象与数组的JSON转为带索引属性的纯对象?
Jolt转换:将混合Object/Array的JSON转为纯Object(数组元素带索引后缀)
示例输入
{ "name": "Alice", "age": 30, "hobbies": ["reading", "hiking", "coding"], "contact": { "email": "alice@example.com", "phones": ["123456", "789012"] } }
问题说明
你当前的Jolt规则未递归处理数组结构,导致输出仍保留原数组,无法将数组元素转为键名_索引格式的属性。
正确Jolt转换规则
[ { "operation": "shift", "spec": { "*": { "[]": { "$": "&2_&1" }, "*": { "[]": { "$": "&3_&2_&1" }, "*": "&3_&2" }, "*": "&2_&1" }, "*": "&" } }, { "operation": "remove", "spec": { "*": null } } ]
规则解释
- shift操作(核心转换)
- 用通配符
*匹配所有键,通过&n路径引用向上层级的键名:- 顶层数组:
&2取数组的父键名(如hobbies),&1取数组索引,组合成hobbies_0格式的属性。 - 嵌套对象里的数组:
&3取最外层父键(如contact),&2取数组键名(如phones),&1取索引,组合成contact_phones_0。 - 普通嵌套对象属性:直接拼接父键和子键(如
contact_email)。 - 顶层普通属性(如
name、age)直接保留原键名。
- 顶层数组:
- 用通配符
- remove操作
- 清理转换过程中可能生成的空值键,保证输出结构干净。
期望输出结果
{ "name": "Alice", "age": 30, "hobbies_0": "reading", "hobbies_1": "hiking", "hobbies_2": "coding", "contact_email": "alice@example.com", "contact_phones_0": "123456", "contact_phones_1": "789012" }
内容的提问来源于stack exchange,提问作者박상수
相关产品推荐
相关产品推荐

