All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Nothing yet
Minor fixes and added some tests.
Support for PHP 8.3
Added PHPStan to build pipeline
Fixed the case when non-intersecting pointers were considered intersecting (#106). Thanks @XedinUnknown
make performance-tests
objects()
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.JSON Pointer parts between slashes (a.k.a reference tokens) must be valid encoded JSON strings to be JSON Pointer RFC 6901 compliant. It means that no internal key decoding is performed anymore. You will have to change your JSON Pointers if you match against keys with escape sequences.
Items::fromString(
'{"quotes\"": [1, 2, 3]}',
- ['pointer' => '/quotes"']
+ ['pointer' => '/quotes\"']
);
Method 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 SyntaxErrorException
Items::__construct
accepts the options array instead of separate arguments. (You won't notice that unless you instantiate Items
class directly)Lexer
renamed to Tokens
DebugLexer
renamed to TokensWithDebugging
pointer
option. See README. Thanks @fwolfsjaeger.Items::getCurrentJsonPointer()
and Items::getMatchedJsonPointer()
to track where you are. See README. Thanks @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}
did not set object key expectation to false
. (#41 via PR #42).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.PHP 8 support (thanks @snapshotpl)
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.
All exceptions now extend JsonMachineException
(thanks @gabimem)
Throws UnexpectedEndSyntaxErrorException
on an unexpected end of JSON structure (thanks @gabimem)
Function 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.
Function 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.
Invalid json object keys will now throw and won't be ignored anymore.
Decoding of json object keys checks for errors and does not silently ignore them.