解析无效、格式错误和勉强符合JSON规范的数据
项目描述
Barely JSON
一个用于解析仅看起来像JSON的数据的Python包
from barely_json import parse
print(parse('[what is this?, , {perhaps, json: no}]'))
# Prints ['what is this?', '', {'perhaps': '', 'json': False}]
相当多的数据乍一看像JSON,但实际上并不完全符合JSON规范 -- 这通常是因为导出软件有问题,有时则是因为格式从未打算用作JSON。
无论你是如何得到这些数据的,现在你都想解析它!然而,大多数JSON解析器都非常严格,所以你的这种类似JSON的混乱无法得到解析。
这就是Barely JSON的作用,它试图解析任何看起来像JSON的东西。除了纯解析之外,Barely JSON还会尝试将你的数据后处理成合适的Python类型,即使你的数据提供者使用例如on
和off
作为布尔字面量。
安装
支持的Python版本为3.7及以后。
pip install barely_json
使用
主例程是parse
> from barely_json import parse
> parse("[NaN, , {state: off, where's my value?}, NULL]")
[nan, '', {'state': False, "where's my value?": ''}, None]
如你所见,parse
默认尝试将非法值转换为合适的Python类型,这通常效果很好。但有时你可能不希望这样,因此你可以禁用自动转换
> parse("[NaN, , {state: off, where's my value?}, NULL]", resolver=None)
[<IllegalValue 'NaN'>,
<IllegalValue ''>,
{<IllegalValue 'state'>: <IllegalValue 'off'>,
<IllegalValue "where's my value?">: <IllegalValue ''>},
<IllegalValue 'NULL'>]
在这种情况下,任何非法或缺失的值都将包装在一个特殊的IllegalValue
类实例中。你也可以提供一个自己的非法值解析器,这只是一个将字符串映射到任意值的回调
> from barely_json import default_resolver
>
> def my_resolver(text):
> if text.lower() == 'one':
> return 1
> return default_resolver(text)
>
> parse('[one, FALSE]', resolver=my_resolver)
[1, False]
在编写自己的解析器时,在处理完特殊情况进行后通常会方便地回退到default_resolver
。
变更日志
查看 CHANGELOG.md
。
许可证
在MIT许可下分发。有关详细信息,请参阅文件 LICENSE
。
贡献者
开发
克隆存储库
git clone https://github.com/torfsen/barely_json.git
cd barely_json
安装开发依赖项
pip install -r requirements-dev.txt
运行测试
tox
对于拉取请求,测试使用GitHub动作运行。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
barely_json-1.0.0.tar.gz (7.7 kB 查看散列)
构建分发
barely_json-1.0.0-py3-none-any.whl (5.9 kB 查看散列)
关闭
barely_json-1.0.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1bbde93cc4cd5fe7992ac24de3fd43b843717f7460700927c3233ae4b1ccee42 |
|
MD5 | 4e8fc7583a8c4d91119bf69db272749e |
|
BLAKE2b-256 | 03bbf7c274654c8b23cd8e8d107779515b670d44244b6b983b5dff32070b6af7 |
关闭
barely_json-1.0.0-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 31511356a359a70bcfe741a26fe05dc1efacca30d145721618b13e5b933e3819 |
|
MD5 | 8de2aa3f1eca99407501c92908f68b08 |
|
BLAKE2b-256 | d2cbeefd729ec41bd0662b68710fac2f4312199847d626461b079007d368f0cc |