求保留原字段的Jolt Spec:提取嵌套name字段为父键_name格式
Jolt转换:保留原始字段并生成嵌套name的扁平化字段
需求说明
需要将JSON中所有包含嵌套name键的对象,生成「父键名_name」格式的新字段,同时完整保留所有原始字段及值。此前尝试的Shift操作仅生成了新字段,但丢失了原始数据。
输入JSON
[ { "id": 123, "foo": "fooooooo", "bar": "bbbbbbarr", "recordtype": { "name": "type123", "some_field": "don't care" }, "parent": { "name": "parent123", "some_field": "don't care" } }, { "id": 456, "foo": "ooooooff", "bar": "rrrrraaabbbb", "recordtype": { "name": "type456", "some_field": "don't care" }, "parent": { "name": "parent789", "some_field": "don't care" } } ]
期望输出JSON
[ { "id": 123, "foo": "fooooooo", "bar": "bbbbbbarr", "recordtype": { "name": "type123", "some_field": "don't care" }, "parent": { "name": "parent123", "some_field": "don't care" }, "recordtype_name": "type123", "parent_name": "parent123" }, { "id": 456, "foo": "ooooooff", "bar": "rrrrraaabbbb", "recordtype": { "name": "type456", "some_field": "don't care" }, "parent": { "name": "parent789", "some_field": "don't care" }, "recordtype_name": "type456", "parent_name": "parent789" } ]
已尝试的Jolt Spec(丢失原始字段)
[ { "operation": "shift", "spec": { "*": { "*": { "name": "[&2].&1_&" } } } } ]
正确的Jolt Spec
[ { "operation": "shift", "spec": { "*": { // 保留当前数组元素的所有原始字段 "@": "[&1]", // 遍历所有顶级键,提取嵌套的name生成新字段 "*": { "name": "[&2].&1_name" } } } } ]
说明
"@": "[&1]":将数组中当前索引的完整对象映射到输出的对应位置,确保所有原始字段被保留。"*": { "name": "[&2].&1_name" }:匹配每个顶级键(如recordtype、parent),当该键对应的对象包含name时,生成父键名_name格式的新字段;其中&2回溯到数组的索引位置,&1指代当前父键的名称。
内容的提问来源于stack exchange,提问作者Ben Cooper
相关产品推荐
相关产品推荐

