Здравствуйте! <br/> У меня есть JSON файл с данными о сотрудниках, и я хочу вывести их фамилию и имя, а также проверить наличие отчества (MiddleName). Если отчество отсутствует, необходимо отобразить сообщение "Отчество отсутствует", а если оно есть - вывести само отчество. <br/> <pre><code class="json">"Employees": [
{
"User": {
"UserId": "000",
"Login": "example@example.ru",
"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}") # Имя: Иван, фамилия: Иванов, отчество: Иванович # Имя: Петр, фамилия: Петров, отчество: отчество отсутствует