On Tue, 13 Aug 2019 at 10:29, Richard Musil <risa20...@gmail.com> wrote:
>
>  My goal is, as already mentioned:
>
> To extend JSON encoder to support custom type to serialize into "JSON real 
> number" (changed "fractional" to "real" to be aligned to Python source 
> internal comment).
>
> This includes support for decimal.Decimal, if it is the custom type the user 
> chooses. I do not understand why you write that supporting Decimal is not my 
> goal.

Support of *just* decimal provides custom type support:

>>> class MyNumber:
>>>     def serialise_to_string(self):
>>>         ....

>>> class MyEncoder(json.JSONEncoder):
>>>     def default(self, obj):
>>>         if isinstance(obj, MyNumber):
>>>             return Decimal(obj.serialise_to_string())

>>> json.dumps([MyNumber(), MyNumber()], cls=MyEncoder())

By limiting support to Decimal, we do the simplest thing that works,
and we ensure that any custom classes get the benefit of having their
string serialisation checked (if it can't be converted to Decimal,
it's not going to be valid JSON) without the person implementing the
custom class having to do anything. In fact, the custom class probably
doesn't even have to implement custom JSON support at all, as it's
quite likely that its normal str() representation is suitable to be
passed to the Decimal constructor.

So defining a special protocol to allow JSON serialisation of numeric
classes *other* than Decimal seems like a clear case of YAGNI. As the
MyEncoder example above shows, support for Decimal allows the end user
to define their own protocol if needed, so even "difficult" cases
(should any exist, I can't think why they would) should be covered.

+1 on supporting Decimal, -1 on supporting anything more complex.

Paul
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/AVEYEBYLIXBHRFKFR3FU4LAUGEYT74WA/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to