wpjscc/react-stream-json

向 react/stream 写入增量 JSON 编码器

v1.0.1 2024-06-09 03:44 UTC

This package is auto-updated.

Last update: 2024-09-09 04:22:08 UTC


README

Continuous Integration Latest Stable Version Total Downloads Type Coverage License

安装

要通过 Composer 安装,请使用以下命令,它将自动检测最新版本并将其与 ^ 绑定。

composer require wyrihaximus/react-stream-json

用法

JsonStream 实现了来自 react/streamReadableStreamInterface,并像 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) 将遍历数组中的项,并根据键的类型调用 writewriteValue

writeObservable

writeObservable(ObservableInterface $values) 将订阅可观察对象,并对每个传入的项调用 writeValue

end

end(array $values = [])$values 包含内容时将调用 writeArray,然后或否则结束流。此时不接受新的值,并继续处理任何未解决的承诺或流。

注意事项

该流不知道你是否要写入对象或数组,因此它假设是对象。它确实尝试检测你是否还没有写入任何内容,并调用 writeArrayend,用项目数组。你可以通过在创建 JsonStream 实例时调用 JsonStream::createArrayJsonStream::createObject 来强制写入数组或对象。将对象项写入设置为数组或相反的流将导致不规则的 JSON。简而言之,你必须知道将要写入什么类型的 JSON

当使用 write 时,不会检查键参数的重复,导致将其再次写入流。请注意,虽然 PHP 认为这是完全有效的 JSON,但 JSON 规范 并没有指定这种行为。因此,您的里程可能不同,如 RFC7159 第 4 节所述,在 PHP 的情况下,它只会使用最后一次出现的值。

工厂

此包附带一个包含用于数组 JsonStreamFactory::createFromArray 和可观察对象 JsonStreamFactory::createFromObservable 的工厂方法的工厂。两者都将创建一些流,暂停它,将数组/可观察对象写入它,并结束它。

贡献

请参阅CONTRIBUTING获取详细信息。

许可证

版权所有 2019 Cees-Jan Kiewiet

在此特此免费授予任何人获得此软件及其相关文档文件(以下简称“软件”)副本的许可,以不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供者提供软件的人进行此类操作,但受以下条件约束:

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、针对特定目的的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是因合同行为、侵权行为或其他方式引起的,以及与软件或软件的使用或其他操作有关。