Лучше контролировать, что на самом деле отправляется.
Эта строка:
data= json.dumps("{\"A\":true,\"B\":false,\"C\":false,\"D\":false}")
весьма подозрительна: вы используете json.dumps
в том, что уже является строкой в кодировке json, когда онапредполагается использовать на объекте для создания строки json.
Я проверил это в интерактивном Python и получил:
>>> data= json.dumps("{\"A\":true,\"B\":false,\"C\":false,\"D\":false}")
>>> print(data)
"{\"A\":true,\"B\":false,\"C\":false,\"D\":false}"
>>> print([(i, hex(ord(i))) for i in data]) # control individual characters
[('"', '0x22'), ('{', '0x7b'), ('\\', '0x5c'), ('"', '0x22'), ('A', '0x41'), ('\\', '0x5c'), ('"', '0x22'), (':', '0x3a'), ('t', '0x74'), ('r', '0x72'), ('u', '0x75'), ('e', '0x65'), (',', '0x2c'), ('\\', '0x5c'), ('"', '0x22'), ('B', '0x42'), ('\\', '0x5c'), ('"', '0x22'), (':', '0x3a'), ('f', '0x66'), ('a', '0x61'), ('l', '0x6c'), ('s', '0x73'), ('e', '0x65'), (',', '0x2c'), ('\\', '0x5c'), ('"', '0x22'), ('C', '0x43'), ('\\', '0x5c'), ('"', '0x22'), (':', '0x3a'), ('f', '0x66'), ('a', '0x61'), ('l', '0x6c'), ('s', '0x73'), ('e', '0x65'), (',', '0x2c'), ('\\', '0x5c'), ('"', '0x22'), ('D', '0x44'), ('\\', '0x5c'), ('"', '0x22'), (':', '0x3a'), ('f', '0x66'), ('a', '0x61'), ('l', '0x6c'), ('s', '0x73'), ('e', '0x65'), ('}', '0x7d'), ('"', '0x22')]
Это доказательство того, что двойные кавычки обидели ("
) и обратная косая черта (\
) были отправлены кодом Python.
Вероятно, вам нужно было:
data = '{"A":true,"B":false,"C":false,"D":false}' # directly store the json string
или
# build the json string from a dict
data = json.dumps({'A': True, 'B': False, 'C': False, 'D': False})