Как преобразовать строку Django TextField в JSON?

У меня следующая модель:

class Car(models.Model):
    data = models.TextField(default="[]")

Кроме того, у меня есть следующий сериализатор:

class CarSerializer(serializers.ModelSerializer):
    data = serializers.ListField(child=serializers.CharField())

REST API получает data и сохраняет его как текстовое поле. В моем to_dict методе Car я хочу преобразовать self.data в JSON и вернуть дикт:

def to_dict(self):
    result = dict()
    result['data']= json.loads(self.data)
    return result

Но он терпит неудачу с ошибкой:

json.decoder.JSONDecodeError: Ожидаемое значение: строка 1 столбец 2 (char 1)

Как я понимаю, причина в том, что self.data является:

"['a', 'b', 'c']"

И нет:

'["a", "b", "c"]'

Я знаком с JsonField, но поскольку я использую SQLite без экстерналии JSON1, я не могу его использовать. Как я могу преобразовать self.data в JSON?

Самый простой способ решения этой задачи - json.loads(self.data.replace('\'','\"')).

Замените ' на ".

Или вы можете попробовать eval(self.data)

Вы можете посмотреть пример здесь об использовании eval

Вы можете использовать метод python json.dumps() для преобразования строки в формат json, а затем использовать json.loads() для преобразования json в объект python.

import json

def to_dict(self):
    result = dict()
    data = json.dumps(self.data)
    result['data'] = json.loads(data)
    return result
Вернуться на верх