如何修改Jolt规则将数组转为可解析的JSON字符串?
问题:修改Jolt规范将数组转为可解析的JSON字符串
原始输入JSON
{ "barcode": "7490b0d2-dfe5-4a21-bc21-02de587e2fe8", "containers": [ { "L_ID": "867bb595-d2a4-4424-a3c3-c96cf9f4d5ee", "barcode": "e75d1dc6-73c7-43ea-a805-27d27839f226" }, { "L_ID": "737dd78f-4657-4be3-a989-c647a6f3c9b6", "barcode": "42e918a2-6417-4e4b-9975-c5332fba2b86" } ] }
原Jolt转换规范
[ { "operation": "shift", "spec": { "barcode": "barcode", "containers": "&" } }, { "operation": "modify-overwrite-beta", "spec": { "containers": "=concat('',@(1,containers))" } } ]
当前转换结果
{ "barcode" : "7490b0d2-dfe5-4a21-bc21-02de587e2fe8", "containers" : "[{L_ID=867bb595-d2a4-4424-a3c3-c96cf9f4d5ee, barcode=e75d1dc6-73c7-43ea-a805-27d27839f226}, {L_ID=737dd78f-4657-4be3-a989-c647a6f3c9b6, barcode=42e918a2-6417-4e4b-9975-c5332fba2b86}]" }
此结果中containers字段的字符串并非标准JSON格式:键名和字符串值没有引号,键值间用=而非:,无法被JSON解析器正常解析。
期望结果(标准JSON兼容版本)
{ "barcode" : "7490b0d2-dfe5-4a21-bc21-02de587e2fe8", "containers" : "[{\"L_ID\":\"867bb595-d2a4-4424-a3c3-c96cf9f4d5ee\", \"barcode\":\"e75d1dc6-73c7-43ea-a805-27d27839f226\"}, {\"L_ID\":\"737dd78f-4657-4be3-a989-c647a6f3c9b6\", \"barcode\":\"42e918a2-6417-4e4b-9975-c5332fba2b86\"}]" }
注:JSON标准要求字符串内部双引号需转义为\",此版本比你给出的单引号版本兼容性更强,可被所有标准JSON解析器正确解析。
修改后的Jolt规范
[ { "operation": "shift", "spec": { "barcode": "barcode", "containers": "&" } }, { "operation": "modify-overwrite-beta", "spec": { "containers": "=toJson(@(1,containers))" } } ]
说明
原Jolt中concat('',@(1,containers))只是将Java对象转为默认的字符串表示(类似toString()输出),并非标准JSON格式。替换为=toJson(@(1,containers))后,Jolt会将containers数组序列化为标准JSON字符串,自动处理引号、冒号和转义规则,生成可正常解析的结果。
内容的提问来源于stack exchange,提问作者adnan hajar
相关产品推荐
相关产品推荐

