Сериализация Python для JSON завершается с ошибкой в ​​десятичном формате

Если целью является только показать его один раз, вы можете использовать пример на веб-сайте MDN в качестве начала.

if (document.cookie.replace(/(?:(?:^|.*;\s*)someCookieName\s*\=\s*([^;]*).*$)|^.*$/, "$1") !== "true") {
  alert("Do something here!");
  document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";
}

http: // jsfiddle.net/daCrosby/pqb5baa5/

Изменить

Здесь он показывает вам div. Заметьте, я переместил стиль в CSS вместо встроенного в мой jsFiddle - гораздо лучший подход, чтобы попасть в зависание

if (document.cookie.replace(/(?:(?:^|.*;\s*)someCookieName\s*\=\s*([^;]*).*$)|^.*$/, "$1") !== "true") {
    document.getElementById("popupp").style.visibility = "visbile";
    document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";
}

http://jsfiddle.net/daCrosby/pqb5baa5/2 /

29
задан Martijn Pieters 15 August 2017 в 09:24
поделиться

3 ответа

Не рекомендуется (больше не) создавать подкласс; функции json.dump() и json.dumps() принимают функцию default:

def decimal_default(obj):
    if isinstance(obj, decimal.Decimal):
        return float(obj)
    raise TypeError

json.dumps({'x': decimal.Decimal('5.5')}, default=decimal_default)

Демонстрация:

>>> def decimal_default(obj):
...     if isinstance(obj, decimal.Decimal):
...         return float(obj)
...     raise TypeError
... 
>>> json.dumps({'x': decimal.Decimal('5.5')}, default=decimal_default)
'{"x": 5.5}'

Код, который вы обнаружили, работал только на Python 2.6 и переопределяет закрытый метод это больше не вызывается в более поздних версиях.

70
ответ дан Martijn Pieters 15 August 2017 в 09:24
поделиться

Я не могу поверить, что никто здесь не говорил об использовании simplejson, который поддерживает десериализацию Decimal из коробки.

import simplejson
from decimal import Decimal

simplejson.dumps({"salary": Decimal("5000000.00")})
'{"salary": 5000000.00}'

simplejson.dumps({"salary": Decimal("1.1")+Decimal("2.2")-Decimal("3.3")})
'{"salary": 0.0}'
17
ответ дан FearlessFuture 15 August 2017 в 09:24
поделиться

Если вы используете Django. Существует отличный класс для полей десятичной дроби и даты:

https://docs.djangoproject.com/en/1.10/topics/serialization/#djangojsonencoder

используйте это:

import json
from django.core.serializers.json import DjangoJSONEncoder

json.dumps(value, cls=DjangoJSONEncoder)
14
ответ дан François Constant 15 August 2017 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: