如何用JQ弹性处理嵌套JSON数组?提取值并调整指定键名
弹性处理Wikidata SPARQL结果的JQ方案
要实现无需硬编码多数键名的转换,同时完成code到iso的重命名,直接提取子对象的value值,可以用以下JQ表达式:
map( with_entries( .key |= if . == "code" then "iso" else . end | .value = .value.value ) )
表达式拆解:
map(...):遍历输入数组中的每一个对象,逐个处理with_entries(...):把对象转换成键值对数组进行批量处理,处理完成后自动转回对象结构.key |= if . == "code" then "iso" else . end:仅对code这个键做重命名,其他键保持原样.value = .value.value:统一提取所有属性值里的value字段,替换掉原来带type和value的子对象
示例演示:
假设你的输入JSON是:
[ { "countryName": {"type": "string", "value": "Japan"}, "code": {"type": "string", "value": "JP"}, "area": {"type": "number", "value": 377975} }, { "countryName": {"type": "string", "value": "Canada"}, "code": {"type": "string", "value": "CA"}, "officialLanguage": {"type": "string", "value": "English"} } ]
执行JQ命令后输出:
[ { "countryName": "Japan", "iso": "JP", "area": 377975 }, { "countryName": "Canada", "iso": "CA", "officialLanguage": "English" } ]
这个方案完全不需要硬编码除code外的任何键名,新增或修改其他属性时,JQ会自动处理,完美适配键名变更的场景。
内容的提问来源于stack exchange,提问作者Hugolpz
相关产品推荐
相关产品推荐

