wpjscc / react-stream-json
向 react/stream 写入增量 JSON 编码器
资助包维护!
WyriHaximus
Requires
- php: ^8.2
- ext-json: *
- evenement/evenement: ^3.0.2
- react/promise: ^3 || ^2.3 || ^1.2.1
- react/stream: ^1.3.0
- reactivex/rxphp: ^2.0.11
- thecodingmachine/safe: ^2.5
Requires (Dev)
- api-clients/rx: ^2.3
- react/promise-stream: ^1.5
- wyrihaximus/async-test-utilities: ^7.0.2
- wyrihaximus/ticking-promise: ^3
This package is auto-updated.
Last update: 2024-09-09 04:22:08 UTC
README
安装
要通过 Composer 安装,请使用以下命令,它将自动检测最新版本并将其与 ^ 绑定。
composer require wyrihaximus/react-stream-json
用法
JsonStream 实现了来自 react/stream 的 ReadableStreamInterface,并像 ThroughStream 一样表现,当你向其写入 write* 时,它将发出数据。
以下示例具有固定数量的 JSON 项,并且可以写入 end 而无需调用 write*。
$stream = new ThroughStream(); $anotherStream = new ThroughStream(); $jsonStream = new JsonStream(); $jsonStream->end([ 'key' => 'value', 'promise' => resolve('value'), 'stream' => $stream, 'nested' => [ 'a' => 'b', 'c' => 'd', ], 'nested_promises' => [ resolve('first'), resolve('second'), ], 'nested_mixed' => [ 'first', resolve($anotherStream), resolve('third'), ], ]); $stream->end('stream contents'); $anotherStream->end('second');
流内容将是:{"key":"value","promise":"value","stream":"stream contents","nested":{"a":"b","c":"d"},"nested_promises":["first","second"],"nested_mixed":["first","second","third"]}
方法
以下所有方法都尝试解析 $value,当它遇到一个承诺时,将等待承诺解析,当它遇到一个流时,将将其内容转发到自己的监听器。承诺可以解析为流,但不能反过来。任何其他参数将通过 json_encode 运行,除了数组,这些数组将搜索承诺和流。
write
write(string $key, $value) 接受一个键和一个值作为参数。将新的键值对写入流。
writeValue
write($value) 只接受一个值作为参数。将值对写入流。
writeArray
writeArray(array $values) 将遍历数组中的项,并根据键的类型调用 write 或 writeValue。
writeObservable
writeObservable(ObservableInterface $values) 将订阅可观察对象,并对每个传入的项调用 writeValue。
end
end(array $values = []) 当 $values 包含内容时将调用 writeArray,然后或否则结束流。此时不接受新的值,并继续处理任何未解决的承诺或流。
注意事项
该流不知道你是否要写入对象或数组,因此它假设是对象。它确实尝试检测你是否还没有写入任何内容,并调用 writeArray 或 end,用项目数组。你可以通过在创建 JsonStream 实例时调用 JsonStream::createArray 或 JsonStream::createObject 来强制写入数组或对象。将对象项写入设置为数组或相反的流将导致不规则的 JSON。简而言之,你必须知道将要写入什么类型的 JSON。
当使用 write 时,不会检查键参数的重复,导致将其再次写入流。请注意,虽然 PHP 认为这是完全有效的 JSON,但 JSON 规范 并没有指定这种行为。因此,您的里程可能不同,如 RFC7159 第 4 节所述,在 PHP 的情况下,它只会使用最后一次出现的值。
工厂
此包附带一个包含用于数组 JsonStreamFactory::createFromArray 和可观察对象 JsonStreamFactory::createFromObservable 的工厂方法的工厂。两者都将创建一些流,暂停它,将数组/可观察对象写入它,并结束它。
贡献
请参阅CONTRIBUTING获取详细信息。
许可证
版权所有 2019 Cees-Jan Kiewiet
在此特此免费授予任何人获得此软件及其相关文档文件(以下简称“软件”)副本的许可,以不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供者提供软件的人进行此类操作,但受以下条件约束:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、针对特定目的的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是因合同行为、侵权行为或其他方式引起的,以及与软件或软件的使用或其他操作有关。