wyrihaximus / react-stream-json
增量 JSON 编码器,写入 react/stream
Requires
- php: ^8.1
- ext-json: *
- evenement/evenement: ^3.0
- react/promise: ^2.10
- react/stream: ^1.1.0
- reactivex/rxphp: ^2.0
- thecodingmachine/safe: ^1.3 || ^2
Requires (Dev)
- api-clients/rx: ^2.2
- react/promise-stream: ^1.5
- wyrihaximus/async-test-utilities: ^5.0.25 || ^6 || ^7
- wyrihaximus/ticking-promise: ^3
- dev-master
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/composer/composer/composer-2.7.0
- dev-renovate/react-promise-3.x
- dev-update-ci-workflow-to-latest-gen
- dev-dependabot/add-v2-config-file
- dev-dependabot/composer/reactivex/rxphp-2.0.8
- dev-json-stream-factory
- dev-add-observable-support
- dev-react-promise-stream-1.0-and-0.1
This package is auto-updated.
Last update: 2024-09-08 16:26:36 UTC
README
安装
通过 Composer 安装,使用以下命令,它将自动检测最新版本并将其绑定到 ^
。
composer require wyrihaximus/react-stream-json
用法
JsonStream
实现了来自 react/stream
的 ReadableStreamInterface
并像 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)
将遍历数组中的项目并调用 write
或 writeValue
,具体取决于键的类型。
writeObservable
writeObservable(ObservableInterface $values)
将订阅观察器,并在每个传入的项目上调用 writeValue
。
end
end(array $values = [])
当 $values
包含内容时将调用 writeArray
,否则结束流。在这一点上不接受新的值,并且它继续处理任何未解决的 promise 或流。
注意事项
流不知道你想要写入对象还是数组,因此它假设是对象。它确实尝试检测你还没有写入任何内容的情况,并使用项目数组调用 writeArray
或 end
。你可以通过在创建 JsonStream
实例时调用 JsonStream::createArray
或 JsonStream::createObject
来强制写入数组或对象。将对象项写入设置为数组或相反的流将导致不规则的 JSON
。简而言之,你必须知道将要写入哪种 JSON
。
当使用 write
时,键参数不会检查重复,结果是在流中再次写入它。请注意,尽管 PHP
认为这是完全有效的 JSON
,但 JSON
规范 并未指定这种行为。因此,你的里程可能不同,如 RFC7159 的第 4 节所述,在 PHP
的情况下,它将仅使用最后一次出现的值。
工厂
本软件包包含一个工厂,其中包含用于数组的工厂方法 JsonStreamFactory::createFromArray
和用于可观察对象的工厂方法 JsonStreamFactory::createFromObservable
。这两个方法都将创建一些流,暂停它们,将数组/可观察对象写入其中,然后结束。
贡献
有关详细信息,请参阅贡献指南。
许可协议
版权所有 2019 Cees-Jan Kiewiet
特此授予任何人免费获取本软件及其相关文档副本(“软件”)的权利,无限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供者提供软件的人进行上述行为,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“现状”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和不侵犯知识产权的保证。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任负责,无论基于合同、侵权或其他原因,是否源于、涉及或与软件或其使用或其他交易有关。