On Aug 8, 2019, at 13:29, Richard Musil <[email protected]> wrote:
> 
> I am not sure I have ever asked for bit-for-bit identical JSON representation.

Your complaint is that the hash is different. If you don’t get bit-for-bit 
identical JSON representation, the hash will not be the same. So either you 
_are_ asking for it, or you’re asking for something that won’t actually solve 
your problem (in which case, why do it?).

And I don’t know how output could be “raw” in an sense other than letting you 
specify the exact byte representation for it, so I don’t get what you’re saying 
when you claim you want the former but don’t want the latter.

> I have always only mentioned `decimal.Decimal` and the lack of proper way to 
> encode it (while having the proper way of decoding it), and if you read the 
> subject of the OP it is asking for "raw output" (in the encoder, nothing 
> about underlying representation)

If decimal really is the only case you or anyone else is ever going to care 
about, you shouldn’t be asking for “raw output”, you should either be asking 
for simplejson’s use_decimal to be brought into the stdlib, or just using 
simplejson in the first place.

If you really do need support for raw output, you’d need a new hook besides 
default, say, rawdefault. This wouldn’t be hard. Other than passing it up and 
down the chain of APIs, the only trick should be the C and Python code down in 
_iterencode that that do this:

    o = _default(o)
    yield from _iterencode(o, _current_indent_level)

… with something like:

    ro = _rawdefault(o)
    if r is not NotImplemented:
        yield ro
   else:
       o = _default(o)
        yield from _iterencode(o, _current_indent_level)       

But I’m pretty sure simplejson had issues raised for something to generalize 
use_decimal this way and always rejected it.

However, that might be only because all such suggestions also had other 
problems. Often they either come along with “I want my hook called _before_ the 
normal encoding, rather than between normal encoding and default”, which has 
serious performance implications, or “I want to be able to create invalid JSON 
so it can be eval’d as JS code”, which is just a bad idea. This one doesn’t 
have either of those problems, and maybe it doesn’t have _any_ problems that 
have come up in the past, but someone has to go through the simplejson issues 
to figure that out.

So, if you really want this, come up with a use case that actually needs it, 
make sure you’ve answered whatever objections were raised in the past for 
simplejson if any, and ideally write a patch to simplejson and/or CPython (but 
if you can’t, I think this one is easy enough that you can hope someone else 
does), and you’ll probably get a difference response than you get by 
defensively claiming that you’re not asking for what you’re asking for but then 
repeating your need for it anyway.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/JLWSX5HTYNFYFYAKBTUICEGKYAZRKFLQ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to