【问题标题】:json response with pythonjson响应与python
【发布时间】:2015-03-03 04:07:38
【问题描述】:

我正在使用 django 1.7.1,我收到一个错误“不是 JSON 可序列化”。这是我的代码

def Project_info(request):
        project_id=request.GET.get('project_id')
        people = Project_Management.objects.all().values()
        print people
        return returnSuccessShorcut ({'people': people })



def returnresponsejson(pass_dict, httpstatus=200):
    json_out = simplejson.dumps(pass_dict)
    return HttpResponse(json_out, status=httpstatus, content_type="application/json")


def returnSuccessShorcut(param_dict={}, httpstatus=200):
    param_dict['success'] = True
    return returnresponsejson(param_dict, httpstatus)

控制台输出是:-

[{'abbreviation': u'IOS', 'acid': None, 'end_date': datetime.datetime(2014, 7, 1, 4, 59, 59, tzinfo=<UTC>), 'start_date': datetime.datetime(2014, 3, 21, 5, 0, tzinfo=<UTC>), 'user_story_id': None, 'project_name': u'2014 -KHL-347/Khaylo', 'modify_date': None, 'project_id': u'67375', 'user_name': None, 'id': 1L, 'isActive': None}]

但是当我在浏览器中点击 api 时,我得到了上述错误。 请提出解决方案。

【问题讨论】:

  • 代码中的哪一行给出了错误?
  • 在这一行:-def returnSuccessShorcut(param_dict={},httpstatus=200):
  • 与您的问题无关,但在def returnSuccessShorcut(param_dict={}, httpstatus=200): 行中,您使用字典作为参数的默认值。不要这样做,因为任何时候使用默认值时,都会在对函数的所有调用之间共享同一个字典。

标签: python json django-1.7


【解决方案1】:

在序列化之前需要将人员转换为列表,因为QuerySet.values返回的ValuesQuerySet默认无法序列化。

def Project_info(request):
    project_id=request.GET.get('project_id')
    people = Project_Management.objects.all().values()
    people = list(people)
    return returnSuccessShorcut ({'people': people })

【讨论】:

  • datetime.datetime(2014, 7, 1, 4, 59, 59, tzinfo=) 不是 JSON 可序列化的
  • @user3762689,简而言之:使用from django.core.serializers.json import DjangoJSONEncoder; json_out = simplejson.dumps(pass_dict, cls=DjangoJSONEncoder)
猜你喜欢
  • 2013-01-02
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多