diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2018-04-25 00:39:48 +0300 |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2018-04-25 01:01:59 +0300 |
commit | 12e30827bc6224a133a1ccfb977c0bccb0c84576 (patch) | |
tree | 57e111e7df0b5fae214cde92767dc3d52c1971b7 /simplejson/encoder.py | |
parent | 2ec708bbc884b956c453eb057547cf0150294be9 (diff) | |
download | simplejson-12e30827bc6224a133a1ccfb977c0bccb0c84576.tar.gz |
Allow to disable serializing bytes by default in Python 3.bytes-encoding
If encoding is None, then bytes objects will be passed to the
default() method instead of transforming into unicode.
Diffstat (limited to 'simplejson/encoder.py')
-rw-r--r-- | simplejson/encoder.py | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/simplejson/encoder.py b/simplejson/encoder.py index 5693eb6..d2b6bca 100644 --- a/simplejson/encoder.py +++ b/simplejson/encoder.py @@ -309,7 +309,7 @@ class JSONEncoder(object): _encoder = encode_basestring_ascii else: _encoder = encode_basestring - if self.encoding != 'utf-8': + if self.encoding != 'utf-8' and self.encoding is not None: def _encoder(o, _orig_encoder=_encoder, _encoding=self.encoding): if isinstance(o, binary_type): o = o.decode(_encoding) @@ -482,8 +482,9 @@ def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, first = False else: buf = separator - if (isinstance(value, string_types) or - (_PY3 and isinstance(value, bytes))): + if isinstance(value, string_types): + yield buf + _encoder(value) + elif _PY3 and isinstance(value, bytes) and _encoding is not None: yield buf + _encoder(value) elif isinstance(value, RawJSON): yield buf + value.encoded_json @@ -533,7 +534,7 @@ def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, def _stringify_key(key): if isinstance(key, string_types): # pragma: no cover pass - elif isinstance(key, binary_type): + elif _PY3 and isinstance(key, bytes) and _encoding is not None: key = key.decode(_encoding) elif isinstance(key, float): key = _floatstr(key) @@ -603,8 +604,9 @@ def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, yield item_separator yield _encoder(key) yield _key_separator - if (isinstance(value, string_types) or - (_PY3 and isinstance(value, bytes))): + if isinstance(value, string_types): + yield _encoder(value) + elif _PY3 and isinstance(value, bytes) and _encoding is not None: yield _encoder(value) elif isinstance(value, RawJSON): yield value.encoded_json @@ -647,8 +649,9 @@ def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, del markers[markerid] def _iterencode(o, _current_indent_level): - if (isinstance(o, string_types) or - (_PY3 and isinstance(o, bytes))): + if isinstance(o, string_types): + yield _encoder(o) + elif _PY3 and isinstance(o, bytes) and _encoding is not None: yield _encoder(o) elif isinstance(o, RawJSON): yield o.encoded_json |