json .loads преобразует действительные JSON в недействительные JSON - PullRequest
0 голосов
/ 19 января 2020

Я использую django -rest-framework для проверки некоторых JSON, полученных в моем webhook, а затем я сохраняю некоторые поля в моей базе данных. Это в основном работает сейчас.

JSON от стороннего производителя, различается по формату и плохо документирован. Поэтому я собираю полные JSON, используя json .loads, и сохраняю их в отдельной таблице, чтобы иметь возможность помочь мне устранить любые запросы, не прошедшие проверку.

Однако я обнаружил, что JSON, возвращаемый json .loads, немного отличается от JSON, который, как утверждает третья сторона, отправляет. Третья сторона отправляет строки и значения в двойных кавычках, но json .loads возвращает то же самое в одинарных кавычках. Третья сторона отправляет значения false и true в нижнем регистре, но json .loads возвращает их с заглавной буквы, ie True и False. Таким образом, JSON становится недействительным.

Сериализаторы проверяют правильность JSON, полученного в webhook. Но если я возьму тот же пост JSON, возвращенный json .loads, и отправлю его снова, используя Postman, то сериализаторы отклонят его как недействительный.

Это нормально для json .loads, чтобы вернуть JSON отформатированы таким образом с недопустимыми одинарными кавычками и заглавными значениями True / False?

transaction_json_data = json.loads(request.body)

1 Ответ

2 голосов
/ 19 января 2020

JSON библиотека в python преобразует JSON строку в python понятный список и словарь. По этой причине строки 'true' и 'false' были преобразованы в python Boolean True и False. Обычно вы храните не JSON объекты, а JSON строки в базах данных No SQL. Вот официальная документация, для получения дополнительной информации https://docs.python.org/3/library/json.html

...