如何用jq从JSON对象数组中提取唯一名称列表
解决方法
你可以通过以下两种jq命令实现需求:
方法一:提取所有名称后去重
直接提取所有LOCATION.NAME的值,再用unique去重:
jq '.Items[].LOCATION.NAME | unique' file.json
执行后输出:
["Dallas","New York"]
方法二:先按名称去重对象,再提取名称
先通过unique_by根据.LOCATION.NAME对Items里的对象去重,再提取名称列表:
jq '.Items | unique_by(.LOCATION.NAME) | map(.LOCATION.NAME)' file.json
你的原命令错误原因
map({LOCATION})冗余:原Items数组的每个元素已经是包含LOCATION键的对象,这一步操作没有意义,反而保留了多余的结构。- 函数调用语法错误:
unique_by是jq的内置函数,应该直接写unique_by(...),而不是用属性访问的.unique_by(...)。 - 路径错误:你试图通过
.NAME访问名称,但当前层级的对象并没有NAME键,正确的路径是.LOCATION.NAME。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

