Почему у меня на мой get запрос не выводится ответ сервера?

Почему у меня на мой get запрос не выводится ответ сервера? Все параметры запроса написаны правильно, программа останавливается на моменте

timestamp=datetime.strptime(message['timestamp'], '%Y-%d-%m %H:%M:%S')
      if timestamp > i:
        print(f">>> {message['user']}: {message['text']} ({message['timestamp']})\n")
        i = timestamp
      else:
        pass

Общий вид кода

import requests
from datetime import datetime, date, time

global i
i = datetime.strptime("0001-01-01 01:01:00", '%Y-%d-%m %H:%M:%S')
while True:
  data = {'from_datetime': i}
  r = requests.get('http://xx.xx.xx.xx/getmessages' , params= data)
  global message
  for message in r.json():
    if not message:
      pass
    else:
      timestamp=datetime.strptime(message['timestamp'], '%Y-%d-%m %H:%M:%S')
      if timestamp > i:
        print(f">>> {message['user']}: {message['text']} ({message['timestamp']})\n")
        i = timestamp
      else:
        pass

Ошибка:

Traceback (most recent call last):
  File "/home/user1/Рабочий стол/podklycheniye/text.py", line 10, in <module>
    for message in r.json():
  File "/usr/lib/python3/dist-packages/requests/models.py", line 900, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/lib/python3/dist-packages/simplejson/__init__.py", line 525, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode
    obj, end = self.raw_decode(s)
  File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode
    return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

Ответы (1 шт):

Автор решения: alex
area13@area13:~$ python3
Python 3.8.10 (default, Sep 28 2021, 16:10:42) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = "[{'user': 'dfsf', 'text': 'ntrcn', 'timestamp': '2021-17-11 11:45:32'}] "
>>> import json
>>> json.loads(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.8/json/decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

проблема в том, что в ответе одинарные кавычки, а json использует двойные кавычки.

Решение? просто замените кавычки в ответе

>>> s.replace("'", '"')
'[{"user": "dfsf", "text": "ntrcn", "timestamp": "2021-17-11 11:45:32"}] '
>>> json.loads(s.replace("'", '"'))
[{'user': 'dfsf', 'text': 'ntrcn', 'timestamp': '2021-17-11 11:45:32'}]

На всякий случай

import requests
import json
from datetime import datetime, date, time

global i
i = datetime.strptime("0001-01-01 01:01:00", '%Y-%d-%m %H:%M:%S')
while True:
  data = {'from_datetime': i}
  r = requests.get('http://xx.xx.xx.xx/getmessages' , params= data)
  global message
  for message in json.loads(r.text.replace("'", '"')):
    if not message:
      pass
    else:
      timestamp=datetime.strptime(message['timestamp'], '%Y-%d-%m %H:%M:%S')
      if timestamp > i:
        print(f">>> {message['user']}: {message['text']} ({message['timestamp']})\n")
        i = timestamp
      else:
        pass
→ Ссылка