一个JSON5解析器,支持保留注释等特性
项目描述
json-five
Python的JSON5
安装
pip install json-five
此项目需要Python 3.8+
主要特性
- 支持JSON5规范
- 支持与stdlib
json
模块类似的接口 - 提供API以处理JSON5文档的抽象模型表示。
- 支持往返加载、编辑和转储,保留注释等非数据元素(基于模型的加载/转储)
用法
注意:导入名称是json5
,与安装名称不同。
对于基本的加载/转储,接口几乎与json
模块相同。
import json5
json_text = """{ // This is a JSON5 comment
"foo": "bar", /* this is a JSON5 block
comment that can span lines */
bacon: "eggs" // unquoted Identifiers also work
}
"""
print(json5.loads(json_text))
# {"foo": "bar", "bacon": "eggs"}
with open('myfile.json5') as f:
data = json5.load(f)
对于加载JSON5,这里提供了相同的参数object_hook
、object_pairs_hook
和parse_*
关键字参数,可用于load
/loads
。
此外,还提供了一个新的钩子parse_json5_identifiers
,用于帮助用户控制解析标识符的输出。默认情况下,对象键中的JSON5标识符以JsonIdentifier
对象的形式返回,它是str
的子类(这意味着它在任何接受str
的地方都是兼容的)。这有助于保持键在往返时相同,而不是将未引用的标识符转换为字符串
>>> text = '{bacon: "eggs"}'
>>> json5.dumps(json5.loads(text)) == text
True
您可以使用parse_json5_identifiers
参数和接收JsonIdentifier
对象的可调用函数来更改此行为。例如,您可以将parse_json5_identifiers=str
指定为将标识符转换为字符串。
>>> json5.dumps(json5.loads(text, parse_json5_identifiers=str))
'{"bacon": "eggs"}'
自定义加载器;抽象JSON5模型
注意:底层的模型API和令牌是不稳定的,即使在次要版本中也可能发生破坏性更改。
json-five还提供了一个API来表示JSON5作为抽象模型。这为各种用例提供了广泛的特性,例如代码检查器、格式化程序、自定义序列化/反序列化等。
示例:一个简单的模型
from json5.loader import loads, ModelLoader
json_string = """{foo: "bar"}"""
model = loads(json_string, loader=ModelLoader())
生成的模型对象看起来大致如下
JSONText(
value=JSONObject(
keys=[Identifier(name="foo", raw_value="foo")],
values=[DoubleQuotedString(characters="bar", raw_value='"bar"')],
trailing_comma=None,
)
)
可以对模型进行编辑,这将影响使用模型转储程序导出时的输出。然而,目前还没有验证来确保您的模型编辑不会在导出时产生无效的JSON5。
您还可以实现自定义加载器和转储程序来控制序列化和反序列化。有关更多信息,请参阅完整文档。
令牌化
您还可以利用JSON5的令牌化
from json5.tokenizer import tokenize
json_string = """{foo: "bar"}"""
for tok in tokenize(json_string):
print(tok.type)
输出将是
LBRACE
NAME
COLON
WHITESPACE
DOUBLE_QUOTE_STRING
RBRACE
状态
该项目目前完全支持JSON5规范及其加载和导出接口,截至v1.0.0版本,它们是稳定的。目前正在进行积极开发,特别是底层抽象JSON5模型表示以及对使用抽象模型进行编辑的能力。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
json_five-1.1.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1c5b1bae6039bc44632d009b32338d4b59ab765c596d96577b52cc3dadc936e2 |
|
MD5 | 43156c407b034cfe1c7b05b5306edbf9 |
|
BLAKE2b-256 | 1ab13f9e2feb61fc7d78fa6cf584477416e75ea9c9b4796a62ace787539c9a04 |
json_five-1.1.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b10608e6af9730b9e1c1a099e71f86acb905991f830957a6b25f53bd4826fe8f |
|
MD5 | 589e7fca5a7f52fd915607046e7694ed |
|
BLAKE2b-256 | 0f6a5f871b895705576faeb1992f0fb574759237ae4e92b905c3d806d84ceea9 |