将 JSON 转换为所有用 jq 标记为 "name" 的事物的换行符分隔列表

Convert JSON to a newline-delimited list of all the things tagged "name" with jq

我正在尝试根据人口超过 15000 人的城市数据集制作一个 .txt 城市列表。 JSON 的结构如下:

[
  {
    "country": "United States",
    "geonameid": 5376890,
    "name": "Newport Beach",
    "subcountry": "California"
  },
  {
    "country": "United States",
    "geonameid": 5377100,
    "name": "Nipomo",
    "subcountry": "California"
  },
  {
    "country": "United States",
    "geonameid": 5377199,
    "name": "Norco",
    "subcountry": "California"
  },
  {
    "country": "United States",
    "geonameid": 5377613,
    "name": "North Glendale",
    "subcountry": "California"
  },
  {
    "country": "United States",
    "geonameid": 5377640,
    "name": "North Highlands",
    "subcountry": "California"
  }
]

我想把它变成一个以换行符分隔的所有标记为“name”的列表,如下所示:

Newport Beach
Nipomo
Norco
North Glendale
North Highlands

我尝试使用我发现的名为 jq 的工具在命令行上执行此操作,不过我可以通过编写类似

的东西来工作
cat world_cities.json | jq '.name' > cities_list.txt

但我收到一条错误消息“jq:错误(位于:0):无法使用字符串“name”索引数组”。 当然,我确定我不完全理解 jq 应该如何工作,而且我没有太多解析 JSON 的经验,但我很难在网上找到我的具体问题的答案.有谁知道我可以做什么来实现我想从命令行实现的目标?

如果你想查看我正在尝试解析的整个数据集,你可以在这里找到它:https://pkgstore.datahub.io/core/world-cities/world-cities_json/data/5b3dd46ad10990bca47b04b4739a02ba/world-cities_json.json

$ jq -r '.[].name' world_cities.json
Newport Beach
Nipomo
Norco
North Glendale
North Highlands

数据被数组包围。您可以使用 .[] 访问元素:. 是数组本身,[] 给出它的元素。然后 .name 给你每个元素的名称。

最后,使用 -r 让 jq 输出不带引号的原始字符串。