Как преобразовать строку 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