如何通过JOLT将嵌套JSON数组转换为简化数组?
正确的JOLT转换方案与学习资源推荐
一、正确的JOLT转换规则
以下是实现需求的JOLT转换规则,核心是通过shift操作将嵌套的addr_info数组展开,并与上层的网卡基础字段合并:
[ { "operation": "shift", "spec": { "*": { "pim_network": { "*": { "addresses": { "*": { "addr_info": { "*": { "@(2,ifindex)": "pim_network.[&1].ifindex", "@(2,ifname)": "pim_network.[&1].ifname", "@(2,address)": "pim_network.[&1].address", "broadcast": "pim_network.[&1].broadcast", "@(2,broadcast)": "pim_network.[&1].broadcast", "family": "pim_network.[&1].family", "local": "pim_network.[&1].local", "prefixlen": "pim_network.[&1].prefixlen", "label": "pim_network.[&1].label" } } } } } } } } } ]
规则说明:
@(2,ifindex):通过路径引用,从当前层级(addr_info的数组元素)向上追溯2层,获取网卡的ifindex字段,同理@(2,ifname)、@(2,address)都是引用上层网卡的基础信息&1:表示当前层级(addr_info的数组元素)的索引,用它来作为目标数组pim_network的索引,确保每个addr_info元素生成独立的条目broadcast字段优先使用addr_info内的取值(如果存在),否则 fallback 到上层网卡的broadcast值,通过先后顺序实现优先级覆盖
二、JOLT学习资源推荐
- JOLT官方Wiki:官方维护的文档,包含所有操作类型(shift、default、remove等)的详细说明,以及
&、@等路径引用符号的用法,是最权威的学习材料 - 实操导向的社区教程:很多开发者会分享实际场景的转换案例,比如数组展开、字段合并、嵌套结构扁平化这类常见需求,通过案例更容易理解规则逻辑
- 在线调试工具:使用开源的JOLT调试工具(可本地部署),实时测试转换规则,通过边写边调的方式快速掌握语法,避免踩坑
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

