Introduction¶
The JSONSeqEncoder class takes streams of JSON-serializable Python objects and
yields for each object its JSON representation sandwiched between an optional
ASCII record separator (RS, \x1e
) and a newline (\n
).
>>> from jsonseq.encode import JSONSeqEncoder
>>> for chunk in JSONSeqEncoder().encode(({"a": i, "b": i} for i in range(3))):
... print(repr(chunk))
...
'{"a": 0, "b": 0}\n'
'{"a": 1, "b": 1}\n'
'{"a": 2, "b": 2}\n'
The RS allows pretty-printed JSON to be streamed out in sequences that can be decoded again.
>>> for chunk in JSONSeqEncoder(with_rs=True, indent=2).encode(({"a": i, "b": i} for i in range(3))):
... print(repr(chunk))
...
'\x1e{\n "a": 0,\n "b": 0\n}\n'
'\x1e{\n "a": 1,\n "b": 1\n}\n'
'\x1e{\n "a": 2,\n "b": 2\n}\n'
You can also get small chunks of the JSON sequences as they are encoded with JSONSeqEncoder’s iterencode method.
>>> for chunk in JSONSeqEncoder(with_rs=True).iterencode(({"a": i} for i in range(3))):
... print(repr(chunk))
...
'\x1e'
'{'
'"a"'
': '
'0'
'}'
'\n'
'\x1e'
'{'
'"a"'
': '
'1'
'}'
'\n'
'\x1e'
'{'
'"a"'
': '
'2'
'}'
'\n'
You can use either encode or iterencode to copy JSON text sequences to a file.
with open("/tmp/example.jsons", "w") as f:
for chunk in JSONSeqEncoder(with_rs=True, indent=2).iterencode(({"a": i, "b": i} for i in range(3))):
f.write(chunk)
There is no need to add a newline when calling the file’s write method. JSONSeqEncoder ensures that it’s already there where it needs to be.
The JSONSeqDecoder class takes streams of JSON texts sandwiched between the optional RS and a newline and yields decoded Python objects.
>>> stream = ['\x1e', '{', '"a"', ': ', '0', '}', '\n', '\x1e', '{', '"a"', ': ', '1', '}', '\n', '\x1e', '{', '"a"', ': ', '2', '}', '\n']
>>> for obj in JSONSeqDecoder().decode(stream):
... print(repr(obj))
...
{'a': 0}
{'a': 1}
{'a': 2}
Objects can be read from a file in the same way.
>>> with open("/tmp/example.jsons") as f:
... for obj in JSONSeqDecoder().decode(f):
... print(repr(obj))
...
{'a': 0, 'b': 0}
{'a': 1, 'b': 1}
{'a': 2, 'b': 2}
API Documentation¶
jsonseq package¶
The jsonseq package.
jsonseq.decode module¶
RFC 7464 GeoJSON Text Sequence decoding.
jsonseq.encode module¶
RFC 7464 GeoJSON Text Sequence encoding.
-
class
jsonseq.encode.
JSONSeqEncoder
(with_rs: bool = True, **kwds)[source]¶ Bases:
object
Encodes sequences of Python objects.
Methods
encode
(self, iterable)Yield JSON representations of objects. iterencode
(self, iterable)Yield parts of JSON representations as available.