【问题标题】:using django.core JSON serializer with JQuery, syntax inconsistency使用带有 JQuery 的 django.core JSON 序列化程序,语法不一致
【发布时间】:2012-01-30 18:04:27
【问题描述】:

我正在尝试将“用户”对象(这是一个 Django.models.Model)传递给我的 Web 视图,但是 Django 和 jQuery 似乎并没有就有效 JSON 的构成达成一致。

相关代码:

有问题的对象,用户(在 models.py 中)

class User(models.Model):
    def __unicode__(self):
        return self.name
    name = models.CharField(max_length = 255)
    adress = models.CharField(max_length = 255)
    city = models.CharField(max_length = 255)
    bank_account = models.CharField(max_length = 9)
    email = models.EmailField()
    barcode = models.CharField(max_length = 10)
    isAdmin = models.BooleanField()
    credit = models.IntegerField()

视图(在views.py中):

def user(request, user_id):
    user = User.objects.filter(pk=user_id)

    JSONSerializer = serializers.get_serializer("json")
    json_serializer = JSONSerializer()
    json_serializer.serialize(user)

    data = json_serializer.getvalue()

    if request.is_ajax():
        return render_to_response("pos/user.json", {'user': data});
    else:
        return HttpResponse(status=400);

Django 模板(pos/user.json):

{{user}}

jQuery 代码:

    var resp = $.getJSON("user/" + $('#elem').text() + ".json",function(json) {
        $('#debug').html("json gotten!");
    });
    resp.error(function(){$('#debug').html(resp.responseText);});

结果是#elem保持不变,#debug获取值:

[{"pk": 4, "model": "pos.user", "fields": {"city": "test", "name": "test", "barcode": "test", "credit": 10, "isAdmin": false, "adress": "test", "email": "example@example.com", "bank_account": "000000000"}}]

如果我从输出中删除方括号,#debug 将变为“json got!”。

根据我目前掌握的信息,我猜测问题可能是 Django 序列化程序输出的东西几乎但不完全不同于 JSON。我无法在任何 JSON 规范中找到方括号(至少,不在这个位置)。

许多人建议的解决方案是使用 simplejson 库,但由于我的用户是 django.models.Model 并且它的字段类型为 django.models.*Field,simplejson 给出了“不想要”的错误.

有什么方法可以修复此代码,而无需从我的序列化字符串中手动修剪 '[' 和 ']'?

P.S.:关于 SO 有一些与此类似的问题,但是我无法找到实际答案

编辑:添加了“用户”对象,以避免混淆。

编辑:简单地将一个对象传递给序列化程序不起作用,这会给出错误:“'User' object is not iterable”

【问题讨论】:

  • 来自 Django 的 JSON 是一个 [ 对象列表 ]。也许您的 getJSON 没有为对象列表做好准备。
  • 这可能是出了什么问题.. 我想知道最好的解决方案是让 Django 的序列化程序将单个对象转换为 JSON(正如我在下面对 Eric Fortin 的回复所示:它并不那么简单只是传递一个对象;))
  • 那个帖子显然已经消失了,我已将答案合并到我原来的问题中。
  • 我确实删除了它,因为它无助于回答您的问题。
  • 好的,我对此很陌生,所以我对 SO 的方式和方法并不完全了解

标签: jquery python django json


【解决方案1】:

我怀疑问题在于您使用的是 render_to_response,而不是设置 mimetype。尝试只返回HttpResponse(data, mimetype='application/json')

【讨论】:

  • 我目前不在可以测试它的电脑附近,但如果我修剪 [] ,这也不应该是一个问题吗?明天我会在我再次靠近笔记本电脑时尝试这个建议,谢谢!
  • [] 是一个红鲱鱼,它们在 JSON 中完全有效(如在 Javascript 中)。就像在 Python 中一样,它们表示项目的列表(数组)。
  • 哇,你完全正确!这修复了错误。谢谢!
猜你喜欢
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 2012-03-17
  • 2015-01-04
  • 1970-01-01
相关资源
最近更新 更多