mehr-it / easy-json
Easy JSON handling (read/write) for large files
Installs: 605
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/mehr-it/easy-json
Requires
- php: >=7.3.0
- ext-json: *
- mehr-it/php-decimals: ^2.0
Requires (Dev)
- phpunit/phpunit: ^8.5
README
Parsing JSON files
Here is a simple example how to parse large JSON files:
(new JsonParser($fh))
    ->eachItem('Library.Books', function($parser, $index) {
        // this callback will be invoked for each book            
        $parser
            ->value('Author', $author)
            ->value('ISBN', $isbn)
            ->consume();
        // do s.th. with author and ISBN data
    })
    ->parse();
The following example shows how values can be collected:
(new JsonParser($fh))
    ->collectItemValues('Library.Books.ISBN', $isbns)
    ->parase();
// $isbns now holds the ISBNs of all books
TODO: add more examples and details
Writing JSON files
Here is a simple example how to write JSON files:
$builder = new JsonBuilder($fh);
$builder->write([
    'version' => '1.0',
    'users' => new JsonArray(function(JsonBuilder $builder) {
        foreach(getUsers() as $currUser) {
            yield ['name' => $currUser->name];
        }
    }),
]);
To force a specific JSON data type, you can use the following classes:
- JsonArray
- JsonObject
- JsonNumber
Resources
You can write a resource as JSON string without reading all the stream data into memory:
$builder->write(new JsonResourceString($fh))
You can optionally encode the data as JSON:
$builder->write(new JsonResourceString($fh, true))