跳转到主要内容

Python对RFC 7464 JSON文本序列的支持

项目描述

jsonseq

RFC 7464 JSON Text Sequences 编码和解码的Python实现。

Build Status Coverage Status Documentation Status

用法

jsonseq.encode.JSONSeqEncoder 类接受流式传输的JSON序列化Python对象,并为每个对象产生其JSON表示形式,该表示形式由可选的ASCII记录分隔符(RS,\x1e)和换行符(\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'

RS允许将格式化的JSON流式传输到可以再次解码的序列中。

>>> 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'

您还可以使用 iterencode() 方法获取编码的JSON序列的小块。

>>> 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'

您可以使用 encode()iterencode() 将JSON文本序列复制到文件中。

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)

调用文件的 write() 方法时无需添加换行符。JSONSeqEncoder确保它已在那里需要的地方。

jsonseq.decode.JSONSeqDecoder 类接受介于可选ASCII记录分隔符(RS,\x1e)和换行符(\n)之间的JSON文本流,并为解码的Python对象生成。

>>> 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}

可以使用相同的方式从文件中读取对象。

>>> 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}

项目详情


下载文件

下载适用于您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

jsonseq-1.0.0.tar.gz (3.3 kB 查看哈希值)

上传时间

构建分发

jsonseq-1.0.0-py3-none-any.whl (4.6 kB 查看哈希值)

上传时间 Python 3

由...