如何编写正确的JSON查询表达式实现指定JSON结构转换
调整JSON查询表达式以生成目标结构
原始输入JSON
{"identifers": {"_id": "f073895e207c3157","attrsDigest": "-706912700","entityTypes": [{"_id": "bacf9e903a6c5def","attrsDigest": "1537152651"},{"_id": "08aac63dacd579c8","attrsDigest": "-1461027456"}],"statuses": [{"_id": "50912252d4781056","attrsDigest": "154590869"}]}}
目标输出JSON
{"identifers": [{"_id": "f073895e207c3157","attrsDigest": "-706912700"},{"_id": "bacf9e903a6c5def","attrsDigest": "1537152651"},{"_id": "08aac63dacd579c8","attrsDigest": "-1461027456"},{"_id": "50912252d4781056","attrsDigest": "154590869"}]}
当前使用的表达式及错误结果
当前查询表达式:
[**].${ "identifers": _id, "digest": attrsDigest }
生成的不符合预期的结果:
{"identifers": ["f073895e207c3157","bacf9e903a6c5def","08aac63dacd579c8","50912252d4781056"],"digest": ["-706912700","1537152651","-1461027456","154590869"]}
正确的查询表达式及说明
方案1:递归匹配(适配结构多变场景)
{ "identifers": $..[?(@._id && @.attrsDigest)] }
通过$..递归遍历所有节点,配合过滤器[?(@._id && @.attrsDigest)]筛选出同时包含_id和attrsDigest的对象,直接将这些对象组成数组赋值给identifers。
方案2:精准路径匹配(适配结构固定场景)
{ "identifers": [$.identifers, $.identifers.entityTypes[*], $.identifers.statuses[*]] }
明确指定需要收集的对象路径:根节点的identifers对象、entityTypes数组的所有元素、statuses数组的所有元素,将这些对象合并为一个数组赋值给identifers,结果更可控。
内容的提问来源于stack exchange,提问作者ronMilne
相关产品推荐
相关产品推荐

