clue/ json-stream
轻量级增量流式JSON解析器
Requires
- php: >=5.3
Requires (Dev)
- phpunit/phpunit: ^9.3 || ^5.7 || ^4.8.35
This package is auto-updated.
Last update: 2024-09-06 14:05:45 UTC
README
这是一个非常简单且轻量级的增量解析器,用于JSON流(连接的JSON和换行符分隔的JSON,在PHP中使用。您可以使用此库来处理由多个JSON文档组成的流数据。
目录
支持我们
我们在开发、维护和更新我们的优秀开源项目上投入了大量的时间。您可以通过在GitHub上成为赞助商来帮助我们维持我们工作的这一高质量。赞助商将获得许多回报,有关详情请参阅我们的赞助页面。
让我们共同将这些项目提升到下一个水平!🚀
JSON流
一个由3个单独JSON文档组成的换行符分隔的JSON(NDJSON)示例流可能看起来像这样
{ "id": 1, "name": "first" } { "id": 3, "name": "third" } { "id": 6, "name": "sixth" }
较少见的情况下,相同的格式被称为JSON行(JSONL)或行分隔JSON(LDJSON),这不要与JSON-LD混淆。为了避免混淆,我们始终将其称为换行符分隔的JSON(NDJSON)。如果您控制生成端,我们强烈建议使用NDJSON而不是使用下面讨论的连接JSON。有关更多信息,请参阅clue/reactphp-ndjson。
对于此项目,单个JSON文档之间的空白完全是可选的。您可以使用任意数量的空白字符或完全不用。
一个由3个单独JSON文档组成的连接JSON示例流可能看起来像这样
{ "id": 1, "name": "first" }{ "id": 3, "name": "third" }{ "id": 6, "name": "sixth"}
输入流可以任意大小,并且可以在任何时候中断。这通常对处理网络流很有用,在处理网络流时,您无法控制块/缓冲区的大小,并且您可能只能读取单个字节。
请注意,此库是用于处理可能包含任意数量JSON文档的流。假设每个文档具有合理的大小并且适合内存。这不要与处理单个、非常大的JSON文档的流式解析器混淆,该文档太大而无法适合内存。
快速入门示例
安装后,您可以使用以下示例代码解析JSON块流
$parser = new StreamingJsonParser(); assert($parser->push('[ 1, 2') === array()); assert($parser->push('3 ]') === array(array(1, 2, 3)); assert($parser->push('{} {}') === array(array(), array());
描述
这实际上只是一种非常简单的技巧,在认为输入流中找到了完整的文档时,调用基于文档的解析器。因为正常的解析器实现为扩展(而不是用户空间PHP),这使得对于包含常见、相对较小的对象的流来说,速度非常快。
如果您需要
- 处理多个JSON文档的流
- 处理不完整的JSON文档块
- 喜欢轻量级解析器
如果您不需要使用此库
- 处理完整的JSON文档
- 在您的单个文档之间有适当的分隔符(如换行符)
- 您的JSON文档太大而无法放入RAM
- 您有计算机科学背景并且/或者非常喜欢真正的增量、递归解析器
安装
安装此库的推荐方法是通过Composer。对Composer不熟悉?你是新用户吗?
该项目目前不遵循SemVer。这将安装最新的支持版本。
$ composer require clue/json-stream:^0.1.1
有关版本升级的详细信息,请参阅变更日志。
该项目旨在在任何平台上运行,因此不需要任何PHP扩展,并支持在旧版PHP 5.3到当前PHP 8+和HHVM上运行。强烈建议为此项目使用PHP 7+。
测试
要运行测试套件,您首先需要克隆此仓库,然后通过Composer安装所有依赖项。
$ composer install
要运行测试套件,请转到项目根目录并运行
$ php vendor/bin/phpunit
许可
本项目采用宽松的MIT许可证发布。
你知道吗?我提供定制开发服务,并为发布和贡献开具发票。有关详情,请联系我(@clue)。
更多
- 如果您想高效地处理(可能是无限的)数据流,您可能想使用clue/reactphp-ndjson来处理换行符分隔的JSON(NDJSON)文件(
.ndjson
文件扩展名)。