Nick Coghlan added the comment:

Issue 19837 is the complementary problem on the serialisation side - users 
migrating from Python 2 are accustomed to being able to use the json module 
directly as a wire protocol module, but the strict Python 3 interpretation as a 
text transform means that isn't possible - you have to apply the text encoding 
step separately.

What appears to have happened is that the way JSON is used in practice has 
diverged from JSON as a formal spec.

Formal spec (this is what the Py3k JSON module implements, and Py2 implements 
with ensure_ascii=False): JSON is a Unicode text transform, which may 
optionally be serialised as UTF-8, UTF-16 or UTF-32.

Practice (what the Py2 JSON module implements with ensure_ascii=True, and what 
is covered in RFC 4627): JSON is a UTF-8 encoded wire protocol

So now we're left with the options:

- try to tweak the existing json APIs to handle both the str<->str and 
str<->bytes use cases (ugly)
- add new APIs within the existing json module
- add a new "jsonb" module, which dumps to UTF-8 encoded bytes, and reads from 
UTF-8, UTF-16 or UTF-32 encoded bytes in accordance with RFC 4627 (but being 
more tolerant in terms of what is allowed at the top level)

I'm currently leaning towards the "jsonb" module option, and deprecating the 
"encoding" argument in the pure text version. It's not pretty, but I think it's 
better than the alternatives.

----------
versions: +Python 3.5 -Python 3.3

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue10976>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to