PaperBoat - Streaming JSON Output
, (*1)
This is an extremely simple, and very alpha quality implementation of a Streaming JSON outputter., (*2)
Show me the goods
$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();
This outputs, for example,, (*3)
{"data":[{"id":1,"name":"Bill Murray"},{"id":2,"name":"Tom Hanks"},{"id":3,"name":"Sigourney Weaver"}],"meta":{"count":3}}
Usage
The primary class you interact with is PaperBoat\JsonStream. The constructor takes an optional PaperBoat\OutputStream parameter, which tells it where to output JSON to. By default, this is a PaperBoat\OutputStream\StdoutStream, which just prints to STDOUT or the HTTP response., (*4)
The following methods construct JSON output:, (*5)
-
startArray() - Begins outputting an array.
-
stopArray() - Closes an array.
-
startObject() - Begins outputting an object.
-
stopObject() - Closes an object.
-
property($name[, $data]) - Adds a property to an object. If you do not provide the value here, you must call startArray(), startObject(), or value() next.
-
value($data) - Adds data to the stream, by JSON encoding it.
The following methods control how data is output:, (*6)
-
setAutomaticFlushing($value) - Controls whether the OutputStream is flushed automatically after data is written to the stream. Defaults to true. If you set this false, you are responsible for calling ->flush() when appropriate.
-
setJsonFlags($value) - Sets the flags passed to json_encode()
-
flush() - Simply calls the provided OutputStream's flush() method.
Installation
Via Composer., (*7)
$ composer require austinhyde/paperboat
Contributing
See CONTRIBUTING, (*8)
FAQ
Why PaperBoat?
Streams of lightweight data => paper boats floating down a stream of water, (*9)
Why do I need this?
You would use this if you need to output a large amount of JSON data without holding the whole data structure in memory at once., (*10)
Most people probably don't need this., (*11)
Why did you make this?
- I was bored
- It didn't exist yet
- Someone might need it, someday
Are these really frequently asked questions?
No, this is a sham, just like all the other FAQs on GitHub., (*12)