Как отобразить значения JSON с помощью Python итеративным способом

#python #json #mapping

#python #json #сопоставление

Вопрос:

У меня есть объект JSON, как показано ниже, который я загружаю из файла. Я хочу проанализировать объект JSON для всех значений CityName.

 {
    "CityList": [
        {
            "Continent": "USA", 
            "CityName": "Chicago"
        }, 
        {
            "Continent": "Russia", 
            "CityName": "Moscow"
        }, 
        {
            "Continent": "Asia", 
            "CityName": "Beijing"
        }, 
        {
            "Continent": "Australia", 
            "CityName": "Sydney"
        }
    ]
} 
 

Я использую скрипт Python для извлечения элемента CityName из JSON such через цикл FOR. Я хочу использовать переменную «name» ниже по потоку по некоторым другим причинам.

  name=Chicago
name=Moscow
name=Beijing
name=Sydney
 

До сих пор я пробовал следующее.

 with open('city_names.json','r') as read_file:
    json_data = read_file.read()
data = json.loads(json_data)
for k,v in data.items():
    name=v['CityName']
    print(name)
 

После безуспешного выполнения вышеуказанного в течение некоторого времени я продолжаю получать эту ошибку «TypeError: индексы списка должны быть целыми числами, а не
str». Я знаю, в чем проблема, но, к сожалению, я не знаю
, как это исправить. Помощь действительно ценится.

Комментарии:

1. Подсказка: в вашем словаре data есть только один ключ, «cityList», значение которого равно [{'Continent': 'USA', 'CityName': 'Chicago'}, {'Continent': 'Russia', 'CityName': 'Moscow'}, {'Continent': 'Asia', 'CityName': 'Beijing'}, {'Continent': 'Australia', 'CityName': 'Sydney'}] .

Ответ №1:

чтобы получить CityName, вы можете выполнить цикл, data['CityList'] поскольку это список:

 for v in data['CityList']:
      name=v['CityName']
      print(name)
 

Ответ №2:

Ваши данные представляют собой список dicts под CityList ключом, поэтому сначала вы должны выполнить итерацию по подразделам списка, а затем вывести значение CityName ключа:

 for d in data['CityList']:
    print(d['CityName'])