Если объект существует в JSON, то выведите другое значение, если нет, то ничего не выводите

#python #json

Вопрос:

 import requests  headers = {  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}  url = f'https:............' response = requests.get(url, headers=headers).json() events = response['events'] for event in events:  List_of_Urls = []  List_of_Urls.append(event['id'])   slug = event['slug']   for List_of_Url in List_of_Urls:  try:  url2 = f'https://.............../{List_of_Url}/.........'  response2 = requests.get(url2, headers=headers).json()    if response2['graphPoints']:  print(slug)  except:  pass  

Ответ JSON пример 1:

 {  "graphPoints": [  {  "minute": 1,  "value": -2  }  

Ответ JSON пример 2:

 {  "error": {  "code": 404,  "message": "Not Found"  } }  

Моя идея заключается в том , что если есть graphPoints in JSON , то печать slug значения, но в прямом if response2['graphPoints']: значении для true or false не работает, как я должен заставить его работать?

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

1. Почему бы вам просто не проверить код ответа и не проигнорировать не 200?

2. помимо ответа @chasmani, есть также возможность использовать короткое замыкание и просто print(response2.get('graphPoints') and slug)

Ответ №1:

Если это объект JSON, я думаю, вы можете просто сделать:

 if 'graphPoints' in response2:  print(slug)  

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

1. Привет , друг @chasmani, спасибо за поддержку. Я добавил две ссылки внутри вопроса, чтобы продемонстрировать ответы, которые дает JSON. Я попробовал два способа, которые вы указали, но у меня ничего не вышло!

2. второй — это антипаттерн. key in some_dict является ли предполагаемый способ проверки членства в dict

3. @BrondbyIF, пожалуйста, опубликуйте дополнительную информацию о том, как это не работает. Первый фрагмент на самом деле тот, который вы ищете

4. Привет @Марат На самом деле я не знаю, почему это не работает, код запускается и не печатает никаких значений , но когда я использую if (response2['graphPoints'][0]['minute'] gt;= 1): , он возвращает отпечатки, поэтому я решаю проблему, но я хотел что-то точное поверх существования точек графика

5. @Brondbyесли ответ содержит опечатку, graphpoints вместо graphPoints