Python: список в JSON

#python #django #jquery-ui-autocomplete

#python #django #jquery-пользовательский интерфейс-автозаполнение

Вопрос:

Я пытаюсь использовать Django с автозаполнением пользовательского интерфейса jquery, но возникли проблемы с отправкой ответа.

Вот мой код:

 def ajax_tags_autocomplete(request):
    """ Autocomplete for tag list """
    beginning_of_title = request.GET.get('term', '')
    tags_found = Tag.objects.values_list('title', flat=True).filter(title__startswith=beginning_of_title)
    return HttpResponse(json.dumps(tags_found), mimetype='application/json')
  

Я получаю сообщение об ошибке:

 [u"php"] is not JSON serializable
  

Почему? Невозможно сериализовать список? Что тогда я должен передать сериализатору?

Я был бы признателен за любой совет.

Ответ №1:

Вы уверены, что это на самом деле список, содержащий объекты Unicode, а не список, содержащий некоторые объекты базы данных? u"php" Может быть просто repr() объектом.

Попробуйте json.dumps([unicode(t) for t in tags_found]) или json.dumps(map(unicode, tags_found))

Комментарии:

1. Это, на самом деле, сработало! Можете ли вы объяснить, что там произошло? Я был уверен, что это values_list('title', flat=True) дало мне обычный плоский список или строки.

2. values_list() возвращает список только после вычисления. Если вы не оцените его ( list(tags_found) это самый простой способ), это будет набор запросов, который не является сериализуемым в JSON.

3. Нет, я действительно не знаком с Django или его ORM. Но поскольку это сработало, это означает, что Django вернул (вероятно, обычный) список, содержащий некоторые объекты, которые не являются обычными объектами str / unicode.