关于嵌套JSON的JOLT转换疑问:输出为何丢失Level1、Level2层级?
为什么JOLT Shift转换后丢失了Level1/Level2层级?怎么保留?
嘿,这个问题我之前也碰到过,咱们一步步来拆解:
问题原因
你原来的Shift规则是直接把Level1.Level2.val1映射到根节点的val001,val2映射到val002——相当于把这两个值从原来的嵌套层级里“拎”到了最外层,所以输出里自然看不到Level1和Level2了。
看一下你原来的规则:
[{ "operation": "shift", "spec": { "Level1": { "Level2": { "val1": "val001", "val2": "val002" } } } }]
这里右侧的val001、val002都是根节点的键,转换后就直接平级了,上层的层级结构自然就消失了。
解决方案:保留层级的Shift规则
要保留Level1和Level2的嵌套结构,只需要在映射的时候把目标路径写完整就行——也就是在右侧的键名前加上Level1.Level2.,让值回到原来的层级里。
调整后的规则如下:
[{ "operation": "shift", "spec": { "Level1": { "Level2": { "val1": "Level1.Level2.val001", "val2": "Level1.Level2.val002" } } } }]
转换后的结果
用这个规则处理你的输入JSON,得到的输出就是你想要的保留层级的结构:
{ "Level1": { "Level2": { "val001": "Test", "val002": "Val" } } }
原理补充
JOLT的Shift操作本质是路径映射:左侧是输入的路径,右侧是你想要生成的输出路径。如果右侧只写单个键名,就会把值放到根节点;如果写完整的嵌套路径(比如Level1.Level2.val001),就会按照这个路径创建嵌套结构,从而保留原来的层级关系。
内容的提问来源于stack exchange,提问作者Amardeep Flora
相关产品推荐
相关产品推荐

