跳转到主要内容

解析无效、格式错误和勉强符合JSON规范的数据

项目描述

Barely JSON

GitHub Actions badge

一个用于解析仅看起来像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类型,即使你的数据提供者使用例如onoff作为布尔字面量。

安装

支持的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 查看散列)

上传时间 Python 3

由以下组织支持