Невозможно получить записи с помощью Django ORM
Проблема:
Пытаюсь получить запись с помощью Django ORM, из таблицы, которая содержит поле JSON, я использую следующую строку:
test_object = House.objects.get(id=301)
Ошибка
TypeError: объект JSON должен быть str, bytes или bytearray, а не dict
Возможная проблема
Заметил, что предыдущий разработчик обновил формат поля JSON в таблице, похоже, что JSON имел плохой формат. Скрипт, используемый для форматирования столбца JSON:
for i in data:
jsonstring = json.dumps(i.result)
new_clear = jsonstring.replace("\\", "")
new_clear = jsonstring.replace("NaN", "null")
i.result = json.loads(new_clear)
i.save()
Комментарии
В pgAdmin поле JSON выглядит хорошо и отформатировано правильно, см. частичную копию JSON ниже:
{"owner_id": 45897, "first_name": "John", "last_name": "DNC", "estate_id": 3201, "sale_date": "3/18/19", "property_street": "123 main st", "property_city": "Miami", "property_state": "FL", "property_zipcode": 33125, "Input_First_Name": "John", "Input_Last_Name": "DNC"}
Я хотел бы знать, как работать с этим полем JSON, чтобы запросить объект. Любая помощь будет оценена по достоинству. Спасибо.
Проверьте, не используется ли в поле пользовательский декодер ( ссылка на документацию ).
Если json-данные действительны в БД, попробуйте подключиться к БД в shell с помощью psycopg2.connect()
, запросить и декодировать с помощью json.loads()
.
Я намеревался опубликовать это в виде комментария, но не хватило репутации, на случай, если это имеет какое-то значение.