halaxa/json-machine
Efficiently parse huge JSON files and streams in PHP with low memory usage. json-machine provides an iterator-style API for incremental decoding of arrays/objects, supports JSON Lines and custom pointers/paths, and works great for imports and ETL tasks.
null value in RecursiveItems (#119). Thanks [@bark92](https://github.com/bark92)
RecursiveItems. See Recursive iteration in README.make performance-testsobjects() and httpClientChunks().JsonMachine entrypoint class. Use Items instead.Decoder interface. Use ItemDecoder instead.Parser::getJsonPointer(). Use Parser::getJsonPointers()/Items::getJsonPointers() instead.Parser::getJsonPointerPath(). No replacement. Was not useful for anything other than testing and exposed internal implementation.Items::fromString(
'{"quotes\"": [1, 2, 3]}',
- ['pointer' => '/quotes"']
+ ['pointer' => '/quotes\"']
);
ItemDecoder::decodeInternalKey() was deleted as well as related ValidStringResult.
They are not used anymore as described in previous point.PassThruDecoder does not decode keys anymore. Both the key and the value yielded are raw JSON now.Parser is object. (You won't notice that unless you use Parser class directly)SyntaxError renamed to SyntaxErrorExceptionItems::__construct accepts the options array instead of separate arguments. (You won't notice that unless you instantiate Items class directly)Lexer renamed to TokensDebugLexer renamed to TokensWithDebuggingpointer option. See README. Thanks [@fwolfsjaeger](https://github.com/fwolfsjaeger).Items::getCurrentJsonPointer() and Items::getMatchedJsonPointer()
to track where you are. See README. Thanks [@fwolfsjaeger](https://github.com/fwolfsjaeger).TokensWithDebugging::getPosition(). Was constantly off by 1-2 bytes.ItemDecoder. ErrorWrappingDecoder decorator now requires ItemDecoder as well.JsonMachine\JsonMachine entry point class is deprecated, use JsonMachine\Items instead.JsonMachine\JsonDecoder\Decoder interface is deprecated. Use JsonMachine\JsonDecoder\ItemDecoder instead.Items replaces JsonMachine.Items.Items::getIterator() now returns Parser's iterator directly. Call Items::getIterator()
instead of JsonMachine::getIterator()::getIterator() to get to Parser's iterator if you need it. Fixes
https://stackoverflow.com/questions/63706550Items uses options in its factory methods instead of growing number of many parameters. See Options in README.Items introduces new debug option. See Options in README.0.7.* takes about 7 seconds in 0.8.0.- in json pointer as a wildcard for an array index. Example: /users/-/id. Thanks [@cerbero90](https://github.com/cerbero90)FileChunks class. Takes care of the proper resource management when iterating via JsonMachine::fromFile().
It is used internally, and you probably won't come across it.ErrorWrappingDecoder. Use it when you want to skip malformed JSON items. See Decoders.StreamBytes and StringBytes renamed to StreamChunks and StringChunks.
These are internal classes, and you probably won't notice the change
unless you use them directly for some reason.ext-json is not required in composer.json anymore, because custom decoder might not need it.
However built-in decoders depend on it so it must be present if you use them.JsonMachineException (thanks [@gabimem](https://github.com/gabimem))UnexpectedEndSyntaxErrorException on an unexpected end of JSON structure (thanks [@gabimem](https://github.com/gabimem))httpClientChunks() is deprecated so that compatibility with Symfony HttpClient
is not on the shoulders of JSON Machine maintainer. The code is simple and everyone can make their own
function and maintain it. The code was moved to examples.objects() is deprecated. The way objects() works is that it casts decoded arrays
to objects. It brings some unnecessary overhead and risks on huge datasets.
Alternative is to use ExtJsonDecoder which decodes items as objects by default (same as json_decode).<?php
use JsonMachine\JsonDecoder\ExtJsonDecoder;
use JsonMachine\JsonMachine;
$jsonMachine = JsonMachine::fromFile('path/to.json', '', new ExtJsonDecoder);
Therefore no additional casting is required.
Nothing yet
How can I help you explore Laravel packages today?