2015-10-22 2 views
0

Обновление: при доступе к странице, которая выводит JSON как вывод с помощью браузера Chrome. Показаны неверные результаты.JsonResponse от Django - отображаются неправильные значения

Рассмотрите этот код django, который создает json. Когда вы json.dumps a 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 и введите json.dumps ({'pk': 455928532169112023}), то будет создан правильный вывод.

Django 1.8.5 и Python 2.7.6 (IPython 4.0.b1)

Является ли это ошибка или особенность?

+0

Я только что открыл оболочку python и сделал это: >>> из django.http import JsonResponse, HttpResponse >>> import json >> > j = JsonResponse ({'pk': 455928532169112023}) >>> h = HttpResponse (json.dumps ({'pk': 455928532169112023})) >>> для i в j: print i >>> для i в h : print i ------------ оба напечатаны b '{"pk": 455928532169112023} ", которое является правильным значением. Когда вы выполняете команды, которые я сделал в вашей оболочке, дает ли тот же результат? – user2719875

+0

yes @ user2719875 это получает curioser и curioser, ваш метод возвращает правильное значение – middlestump

+0

@ user2719875 Я нашел ответ, но это было благодаря вашему комментарию, который помог мне его найти. Вы опубликуете это как ответ? Я дам возмещение. – middlestump

ответ

1

После @ user2719875 answer. Я искал возможные другие проблемы. Раньше я использовал хром. Проверено в firefox, а затем wget и обнаружил, что результат был верным. Затем я отключил некоторые расширения в хроме. Проблема заключалась в расширении Chrome JsonView. (Я не буду ссылаться на него, потому что это багги). Расширение отображало значения неправильно! Это была ошибка, которая потратила много времени на мое время.

Обновление: после этого я попробовал несколько json-зрителей в магазине chrome. Единственный, который, казалось, дал правильный результат, был «JSON Viewer» от «Tulios»

3

Как уже упоминалось в комментариях, я открыл питона оболочки и сделал это:

>>>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, так что проблема может быть где-то еще.

+0

Хотя это не решило проблему напрямую, это помогло мне найти ее. Проблема заключалась в расширении chrome Json, которое использовалось. Он показывал неправильный результат !! – middlestump

Смежные вопросы