【问题标题】:JsonResponse from Django - Incorrect values displayed来自 Django 的 JsonResponse - 显示的值不正确
【发布时间】:2016-01-21 03:52:03
【问题描述】:

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

考虑这个产生 json 的 django 代码。当您json.dumpslong 时,这两位数字与预期值不同。代码如下:

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)

这是错误还是功能?

【问题讨论】:

  • 我刚刚打开 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}' 这是正确的值。当你执行我在你的 shell 中执行的命令时,它会给出相同的输出吗?
  • 是的@user2719875 这是越来越好奇,你的方法返回正确的值
  • @user2719875 我找到了答案,但感谢您的评论,这帮助我找到了答案。你会把它作为答案发布吗?我会放弃投票。

标签: python json django google-chrome


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    正如 cmets 中提到的,我打开了 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,所以问题可能出在其他地方。

    【讨论】:

    • 虽然这并没有直接解决问题,但它确实帮助我找到了它。问题出在正在使用的 chrome Json 扩展中。结果显示不正确!!
    猜你喜欢
    • 2017-01-29
    • 2012-11-08
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多