JsonResponse von Django – Falsche Werte werden angezeigt

Update: Wenn Sie auf eine Seite zugreifen, die JSON als Ausgabe mit dem Chrom-Browser erzeugt. Falsche Ergebnisse werden angezeigt.

Betrachten Sie diesen Django-Code, der json produziert. Wenn Sie json.dumps eine long , die beiden Ziffern unterscheiden sich von dem erwarteten Wert. Hier ist der Code:

  • UnicodeDecodeError: 'ascii' Codec kann das Byte 0xe0 nicht in Position 0 decodieren: Ordinal nicht im Bereich (128)
  • Ändern Sie die Daten, die zum Django-Formular eingehen, bevor Sie reinigen
  • Wie kann ich das Django-Projekt in PyCharm einrichten?
  • Hinzufügen eines generischen Bildfeldes auf ein ModelForm in django
  • Datumsformat ändern in django
  • Django FormWizard, wie man die Formularliste dynamisch ändert
  •  from django.http import JsonResponse, HttpResponse import json def dumps1(request): return JsonResponse({'pk': 456011173705795438 }) def dumps2(request): return HttpResponse(json.dumps({'pk': 455928532169112023 })) 

    Natürlich würden Sie erwarten, dass dumps1 zurückkehren und HttpResponse mit dem Körper als {'pk': 456011173705795438 } während dumps2 sollte zurückgeben {'pk': 455928532169112023 } aber die tatsächlichen Ergebnisse sind

     { pk: 456011173705795460 } 

    und

     { pk: 455928532169112000 } 

    Beachten Sie, dass in beiden Fällen die letzten beiden Ziffern in der Nummer geändert wurden. Wenn du die Django-Schale öffnest und in json.dumps ({'pk': 455928532169112023}) eintippst, wird die richtige Ausgabe erzeugt.

    Django 1.8.5 und Python 2.7.6 (ipython 4.0.b1)

    Ist das ein Bug oder ein Feature?

    2 Solutions collect form web for “JsonResponse von Django – Falsche Werte werden angezeigt”

    Wie in den Kommentaren erwähnt, öffnete ich die Pythonschale und tat dies:

     >>>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 

    Beide gedruckt b'{"pk": 455928532169112023}' was der richtige Wert ist. Ich benutze auch Django 1.8, also kann das Problem irgendwo anders sein.

    Nach @ user2719875 's Antwort . Ich suchte nach möglichen anderen Problemen. Ich habe vorher Chrom benutzt. Checked in Firefox und dann wget und festgestellt, dass das Ergebnis korrekt war. Dann habe ich einige Erweiterungen in Chrom deaktiviert. Das Problem war in Chrome JsonView Erweiterung. (Ich werde nicht damit verknüpfen, weil es buggy ist). Die Erweiterung zeigte die Werte falsch an !! Das war ein Fehler, der viele Stunden meiner Zeit verschwendet hat.

    Update: Danach habe ich mehrere Json-Zuschauer im Chrom-Shop ausprobiert. Die einzige, die das richtige Ergebnis zu produzieren schien, war "JSON Viewer" von 'Tulios'

    Python ist die beste Programmiersprache der Welt.