我有我使用与AJAX进行实验的简单视图。

def get_shifts_for_day(request,year,month,day):

    data= dict()
    data['d'] =year
    data['e'] = month
    data['x'] = User.objects.all()[2]

    return HttpResponse(simplejson.dumps(data), mimetype='application/javascript')

此返回以下结果:

TypeError at /sched/shifts/2009/11/9/

<User: someguy> is not JSON serializable

如果我取出数据[“X”]线,使得我不引用它的工作原理的任何模型,并返回这样的:

{"e": "11", "d": "2009"}

为什么不能simplejson解析我的Django缺省的车型之一?我与我使用任何型号相同的行为。

有帮助吗?

解决方案

您只需要添加,在你.dumps呼叫,default=encode_myway说法让simplejson知道做什么,当你通过它的数据,其类型,它不知道 - 回答了你的“为什么”的问题当然是你没有的告诉simplejson差如何处理你的模型的实例中的一个做的。

当然,你需要写encode_myway提供JSON-可编码数据,e.g:

def encode_myway(obj):
  if isinstance(obj, User):
    return [obj.username,
            obj.firstname,
            obj.lastname,
            obj.email]
    # and/or whatever else
  elif isinstance(obj, OtherModel):
    return [] # whatever
  elif ...
  else:
    raise TypeError(repr(obj) + " is not JSON serializable")

基本上,JSON知道非常基本数据类型(字符串,整型和浮点型,组合成字典和列表) - 这是作为一个应用程序的程序员来匹配其他一切从这些基本数据类型/你的责任,并在simplejson这典型地穿过在default=dump时间dumps一个函数来完成。

另外,你可以使用json串行这是Django中的一部分,见的文档

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top