wyrihaximus/react-stream-json

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

1.4.2 2023-06-16 18:11 UTC

README

Continuous Integration Latest Stable Version Total Downloads Type Coverage License

安装

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

composer require wyrihaximus/react-stream-json

用法

JsonStream 实现了来自 react/streamReadableStreamInterface 并像 ThroughStream 一样表现,当你向它写入数据时,它会发出数据。

以下示例中 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,当它遇到 promise 时,它会等待 promise 解析,当它遇到流时,它会将其内容转发到自己的监听器。Promise 可以解析为流,但不能反向解析。任何其他参数将通过 json_encode 运行,除了数组,这些数组将搜索 promise 和流。

write

write(string $key, $value) 接受一个键和一个值作为参数。将新的键值对写入流。

writeValue

write($value) 只接受一个值作为参数。将值对写入流。

writeArray

writeArray(array $values) 将遍历数组中的项目并调用 writewriteValue,具体取决于键的类型。

writeObservable

writeObservable(ObservableInterface $values) 将订阅观察器,并在每个传入的项目上调用 writeValue

end

end(array $values = [])$values 包含内容时将调用 writeArray,否则结束流。在这一点上不接受新的值,并且它继续处理任何未解决的 promise 或流。

注意事项

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

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

工厂

本软件包包含一个工厂,其中包含用于数组的工厂方法 JsonStreamFactory::createFromArray 和用于可观察对象的工厂方法 JsonStreamFactory::createFromObservable。这两个方法都将创建一些流,暂停它们,将数组/可观察对象写入其中,然后结束。

贡献

有关详细信息,请参阅贡献指南

许可协议

版权所有 2019 Cees-Jan Kiewiet

特此授予任何人免费获取本软件及其相关文档副本(“软件”)的权利,无限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供者提供软件的人进行上述行为,前提是遵守以下条件

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

软件按“现状”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和不侵犯知识产权的保证。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任负责,无论基于合同、侵权或其他原因,是否源于、涉及或与软件或其使用或其他交易有关。