跳转到主要内容

一个JSON5解析器,支持保留注释等特性

项目描述

json-five

Python的JSON5

Documentation Status Build version pyversion Coverage

安装

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_hookobject_pairs_hookparse_*关键字参数,可用于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 (26.8 kB 查看哈希值)

上传时间

构建分发

json_five-1.1.2-py3-none-any.whl (21.4 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面