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
在此特此免费授予任何人获得此软件及其相关文档文件(以下简称“软件”)副本的许可,以不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供者提供软件的人进行此类操作,但受以下条件约束:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、针对特定目的的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是因合同行为、侵权行为或其他方式引起的,以及与软件或软件的使用或其他操作有关。