来自Django的JsonResponse - 显示的值不正确

时间:2015-10-22 00:12:31

标签: python json django google-chrome

更新:当您使用Chrome浏览器访问使用JSON作为输出的页面时。显示的结果不正确。

考虑一下生成json的django代码。当您json.dumps long时,两位数字与预期值不同。这是代码:

from django.http import JsonResponse, HttpResponse
import json

def dumps1(request):
    return JsonResponse({'pk': 456011173705795438 })


def dumps2(request):
    return HttpResponse(json.dumps({'pk': 455928532169112023 }))

当然,您希望dumps1返回,HttpResponse的正文为{'pk': 456011173705795438 },而dumps2应返回{'pk': 455928532169112023 },但实际结果为

{
    pk: 456011173705795460
}

{
    pk: 455928532169112000
}

请注意,在这两种情况下,数字中的最后两位数都已更改。如果你打开django shell并输入json.dumps({' pk':455928532169112023}),就会产生正确的输出。

Django 1.8.5和python 2.7.6(ipython 4.0.b1)

这是一个错误还是一个功能?

2 个答案:

答案 0 :(得分:3)

正如评论中所提到的,我打开了python shell并做了这个:

>>>from django.http import JsonResponse, HttpResponse 
>>>import json 
>>>j = JsonResponse({'pk': 455928532169112023 }) 
>>>h = HttpResponse(json.dumps({'pk': 455928532169112023 })) 
>>>for i in j: 
    print i 
>>>for i in h: 
    print i

打印b'{"pk": 455928532169112023}'这是正确的值。我也在使用Django 1.8,所以问题可能出在其他地方。

答案 1 :(得分:1)

在@ user2719875的answer之后。我找了其他可能的问题。我以前用的是铬。检查firefox然后wget,发现结果是正确的。然后我在chrome中禁用了一些扩展。问题出在Chrome JsonView扩展中。 (我不会链接到它,因为它是错误的)。扩展程序显示错误的值!!这是一个浪费了我很多时间的错误。

更新:之后我在chrome商店中尝试了几个json查看器。似乎产生正确结果的唯一一个是“Tulios”的“JSON Viewer”