austinhyde/paperboat

流式 JSON 发射器

v0.1.0 2015-05-04 03:56 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:19:56 UTC


README

Build Status Latest Version MIT Licensed

这是一个极其简单,且质量非常初级的流式 JSON 输出器实现。

展示内容

$stream = new PaperBoat\JsonStream();
$stream
  ->startObject()
  ->property('data')
  ->startArray();

$i = 0;
while ($row = $pdoStmt->fetch(PDO::FETCH_ASSOC)) {
  $i++;
  $stream->value($row);
}

$stream
  ->stopArray()
  ->property('meta')
  ->startObject()
    ->property('count', $i)
  ->stopObject()
  ->stopObject();  

例如,它输出以下内容:

{"data":[{"id":1,"name":"Bill Murray"},{"id":2,"name":"Tom Hanks"},{"id":3,"name":"Sigourney Weaver"}],"meta":{"count":3}}

用法

您主要交互的类是 PaperBoat\JsonStream。构造函数接受一个可选的 PaperBoat\OutputStream 参数,该参数告诉它将 JSON 输出到何处。默认情况下,这是 PaperBoat\OutputStream\StdoutStream,它只是打印到 STDOUT 或 HTTP 响应。

以下方法用于构建 JSON 输出

  • startArray() - 开始输出一个数组。
  • stopArray() - 关闭一个数组。
  • startObject() - 开始输出一个对象。
  • stopObject() - 关闭一个对象。
  • property($name[, $data]) - 向对象添加一个属性。如果您在这里不提供值,您必须调用 startArray()startObject()value()
  • value($data) - 通过 JSON 编码将数据添加到流中。

以下方法控制数据的输出方式

  • setAutomaticFlushing($value) - 控制在数据写入流后是否自动刷新 OutputStream。默认值为 true。如果您将其设置为 false,您将负责在适当的时候调用 ->flush()
  • setJsonFlags($value) - 设置传递给 json_encode() 的标志。
  • flush() - 简单地调用提供的 OutputStreamflush() 方法。

安装

通过 Composer。

$ composer require austinhyde/paperboat

贡献

CONTRIBUTING

常见问题解答

为什么是 PaperBoat?

轻量级数据流 > 水流中的纸船

为什么我需要这个?

如果您需要在一次内存中不保留整个数据结构的情况下输出大量 JSON 数据,则可以使用此工具。

大多数人可能不需要这个。

为什么你要创建这个?
  1. 我很无聊
  2. 它还没有存在
  3. 某天可能会有人需要它
这些真的是常见问题吗?

不,这只是一个骗局,就像 GitHub 上的其他所有常见问题解答一样。