Django 抛出“[123L, 123L] is not JSON serializable”
Posted
技术标签:
【中文标题】Django 抛出“[123L, 123L] is not JSON serializable”【英文标题】:Django is throwing a "[123L, 123L] is not JSON serializable" 【发布时间】:2012-02-16 12:12:54 【问题描述】:在我的代码中:
json.dumps('foo': 'bar': [123L, 123L])
长整数是主键。此行由于某种原因会产生错误:
“[123L, 123L] 不是 JSON 可序列化的”
当我尝试在 python manage.py shell 中执行它时:
json.dumps('foo': 'bar': [123L, 123L])
工作正常。
谁能告诉我发生了什么事?
确切的 Django 错误:
异常类型:TypeError 异常值:[123L] 不是 JSON 可序列化的 异常位置:默认为 /usr/lib/python2.7/dist-packages/simplejson/encoder.py,第 192 行
【问题讨论】:
首先,您发布的代码缺少右括号 (
)...
你能告诉我们抛出异常的(最小的)完整代码吗?
尝试将 123L 转换为 int
您能否向我们提供有关您的环境的更多信息? Django 版本、操作系统等
我刚刚意识到实际问题是什么:[123L, 123L] 是 ValuesListQuerySet 类型 - 我需要以某种方式将其转换为列表。
【参考方案1】:
这对我有用:
from django.db.models.query import ValuesListQuerySet
def default(o):
if isinstance(o, ValuesListQuerySet):
return list(o)
raise TypeError(repr(o) + " is not JSON serializable")
json.dumps(valueListObject, default=default)
【讨论】:
以上是关于Django 抛出“[123L, 123L] is not JSON serializable”的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Django Crispy Forms 会抛出“模块‘django.forms.forms’没有属性‘BoundField’”
Django 问题:django.setup() 抛出“ImportError: No module named 'project_name'”
Django 1.7 抛出 django.core.exceptions.AppRegistryNotReady:模型尚未加载
django-filebrowser 无法访问并抛出 404