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

Django-cms Placeholderfield 不工作,抛出 lambda 异常

为啥django-q会用箭头时间抛出异常