如何使用JOLT拼接字符串:合并驾驶员姓名至name字段
解决方法
你之前的modify-overwrite-beta转换失效,核心问题是路径层级错误:你用了@(2,first_name),但当前处于drivers_details.*层级,往上2层是根节点,根节点下没有first_name字段,应该用@(1,first_name)来引用当前驾驶员对象下的first_name。
下面提供两种可行的实现方案:
方案一:先拼接name再做结构转换
先通过modify-overwrite-beta生成name字段,再用shift调整结构,一步到位保留所需字段:
[ { "operation": "modify-overwrite-beta", "spec": { "drivers_details": { "*": { "name": "=concat(@(1,first_name), ' ', @(1,last_name))" } } } }, { "operation": "shift", "spec": { "drivers_details": { "*": { "cnp": "body.drivers[&1].tin", "id_series": "body.drivers[&1].id_series", "id_number": "body.drivers[&1].id_number", "name": "body.drivers[&1].name" } } } } ]
方案二:先调整结构再拼接name
如果需要先完成结构转换,再处理字段拼接,可以先保留first_name和last_name,拼接后再移除原字段:
[ { "operation": "shift", "spec": { "drivers_details": { "*": { "cnp": "body.drivers[&1].tin", "id_series": "body.drivers[&1].id_series", "id_number": "body.drivers[&1].id_number", "first_name": "body.drivers[&1].first_name", "last_name": "body.drivers[&1].last_name" } } } }, { "operation": "modify-overwrite-beta", "spec": { "body": { "drivers": { "*": { "name": "=concat(@(1,first_name), ' ', @(1,last_name))" } } } } }, { "operation": "remove", "spec": { "body": { "drivers": { "*": { "first_name": "", "last_name": "" } } } } } ]
两种方案最终输出的结果一致:
{ "body": { "drivers": [ { "tin": "1641201390687", "id_series": "RK", "id_number": "123456", "name": "Doru Petre" }, { "tin": "16412013906871", "id_series": "RK", "id_number": "1234567", "name": "GIGI FANE" } ] } }
内容的提问来源于stack exchange,提问作者caputz
相关产品推荐
相关产品推荐

