Здравствуйте! <br/> У меня есть JSON файл с данными о сотрудниках, и я хочу вывести их фамилию и имя, а также проверить наличие отчества (MiddleName). Если отчество отсутствует, необходимо отобразить сообщение "Отчество отсутствует", а если оно есть - вывести само отчество. <br/> <pre><code class="json">"Employees": [ { "User": { "UserId": "000", "Login": "[email protected]", "FullName": { "LastName": "Иванов", "FirstName": "Иван" }, "Registered": true } ]</code></pre> <br/> <br/> Я перебираю весь JSON файл в цикле, но у меня не получается правильно проверить наличие отчества. <br/> Не могли бы вы помочь разобраться, в чем именно заключается моя ошибка? <br/> <pre><code class="python">for item in response.json()['Employees']: FirstName = str("Имя: "+item["User"]["FullName"]["FirstName"]+",") # Получение имени LastName = str("Фамилия: "+item["User"]["FullName"]["LastName"]+",") # Получение фамилии MiddleName = str(item["User"]["FullName"]["MiddleName"]) # Получение отчества if MiddleName.get("MiddleName") is None: print("Отчество отсутствует ") else: print(MiddleName.get("MiddleName")) print(FirstName, LastName , MiddleName )</code></pre>
Здравствуйте! Для того чтобы проверить, существует ли поле в JSON файле, вы можете использовать конструкцию `if` для проверки наличия ключа в словаре. В вашем случае для проверки наличия отчества (`MiddleName`) лучше всего использовать оператор `in`. Ниже приведён исправленный код: ```python # Предполагается, что 'response' - это объект, возвращаемый библиотекой requests. # Например, response = requests.get('url') for item in response.json()['Employees']: FirstName = "Имя: " + item["User"]["FullName"]["FirstName"] # Получение имени LastName = "Фамилия: " + item["User"]["FullName"]["LastName"] # Получение фамилии # Проверка наличия поля MiddleName if "MiddleName" in item["User"]["FullName"]: MiddleName = "Отчество: " + item["User"]["FullName"]["MiddleName"] # Получение отчества print(MiddleName) else: print("Отчество отсутствует") # Вывод фамилии и имени print(FirstName, LastName) ``` ### Пояснения: 1. Мы используем `if "MiddleName" in item["User"]["FullName"]:` для проверки наличия ключа `MiddleName` в словаре `FullName`. 2. Если ключ существует, то мы получаем значение и выводим его, иначе выводим сообщение "Отчество отсутствует". 3. Важно помнить, что ваш первоначальный код использует `str()` для присвоения значений, это не обязательно, так как вы уже формируете строки. Также нет необходимости использовать `get`, когда вы проверяете наличие ключа с помощью `in`. Эти изменения должны помочь вам правильно обрабатывать данные из JSON файла.
Ну так сначала проверяй наличие поля, а потом только доставай, а не наоборот, хотя метод get позволяет это совместить. И зачем ты еще к str приводишь?
Объекты типа str не имеют метода get, такие методы характерны для маппингов (ключ-значение) напрмиер словарь.
get("MiddleName")
нужно проверять в другом месте, где ты ожидаешь встретить данный ключ.
Применять метод .get() к строке не лучшее решение, попробуйте так:
for item in response.json()['Employees']: first_name = item["User"]["FullName"]["FirstName"] last_name = item["User"]["FullName"]["LastName"] if "MiddleName" in item["User"]["FullName"]: middle_name = item["User"]["FullName"]["MiddleName"] else: middle_name = "отчество отсутствует" print(f"Имя: {first_name}, фамилия: {last_name}, отчество: {middle_name}") # Имя: Иван, фамилия: Иванов, отчество: Иванович # Имя: Петр, фамилия: Петров, отчество: отчество отсутствует