更新:当您使用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)
这是一个错误还是一个功能?
答案 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”