JMESPath嵌套数组项拼接:JSON结构转换问题求助
如何用JMESPath将JSON附件列表转换为完整URL数组
我明白你的困扰——单个附件能生成正确URL,但批量处理时就乱了,这是因为直接对整个数组的id和filename做拼接,会把所有id和文件名分别串起来,而不是一一配对。咱们用JMESPath的map函数就能解决这个问题,它可以遍历数组里的每一项,单独处理每个附件的URL拼接。
正确的JMESPath表达式
{ processId: key, attachments: map(&join('', ['https://example.com/files/', @.id, '/', @.filename]), fields.attachment) }
关键逻辑说明
map(&..., fields.attachment):遍历fields.attachment数组中的每一个附件对象,对每个对象执行&后面的拼接逻辑@在map的上下文里代表当前正在处理的那个附件对象,所以@.id就是当前附件的ID,@.filename就是它的文件名- 对每个附件,用
join把URL前缀、ID、文件名拼接成完整的URL,最终会自动生成一个URL数组
实际运行结果
把这个表达式用到你的原始JSON上,就能得到你想要的目标结构:
{ "processId": "processId-29231", "attachments": [ "https://example.com/files/79572/File1.png", "https://example.com/files/74620/File2.docx", "https://example.com/files/79072/File3.xlsx" ] }
之前的两种方式失效的原因很明确:fields.attachment[].id会返回所有ID组成的数组,fields.attachment[].filename返回所有文件名组成的数组,join操作会把这两个数组的元素各自拼接成长字符串,而不是按位置一一组合。用map就能完美解决这个逐个处理的需求~
内容的提问来源于stack exchange,提问作者user9445
相关产品推荐
相关产品推荐

