NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #678 most downloaded on Packagist
Efficient, easy-to-use and fast JSON pull parser
Last release 10 months ago
05 Dec 2025
Release timing varies
gaps range from 2 weeks to 1.1 years
Most releases are documented
notes for 23 of 30 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
32 releases · first in 2018
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
One column per quarter.
<br>
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
<br>
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
<br>
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
RecursiveItems. See Recursive iteration in README.<br>
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
<br>
See CHANGELOG for changes and release notes.
See CHANGELOG for changes and release notes.
Meaningful error on invalid token.
Fixed warning when generating autoload classmap via composer.
<br>
Autoloading without Composer. Thanks @a-sync.
Broken command make performance-tests
make performance-tests<br>
Removed deprecated functions objects() and httpClientChunks().
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.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.Items::getCurrentJsonPointer() and Items::getMatchedJsonPointer()
to track where you are. See README. Thanks @fwolfsjaeger.TokensWithDebugging::getPosition(). Was constantly off by 1-2 bytes.<br>
JsonMachine\JsonMachine entry point class is deprecated, use JsonMachine\Items instead.
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.<br>
Nothing published for this version
Nothing published for this version
DEV: Build system switched to composer scripts and Makefile
<br>
Use a - in json pointer as a wildcard for an array index. Example: /users/-/id. Thanks @cerbero90
- in json pointer as a wildcard for an array index. Example: /users/-/id. Thanks @cerbero90<br>
Empty dict at the end of an item was causing Syntax error in the next item. Reason: closing } did not set object key expectation to false. (#41 via PR
New: Json pointer can find scalar values in JSON document as well as iterable values. See Getting single scalar values
<br>
Introduced FileChunks class. Takes care of the proper resource management when iterating via JsonMachine::fromFile(). It is used internally, and you p
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.<br>
### New features - Tracking of parsing progress
<br>
Function httpClientChunks() is deprecated so that compatibility with Symfony HttpClient is not on the shoulders of JSON Machine maintainer. The code i…
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)UnexpectedEndSyntaxErrorException on an unexpected end of JSON structure (thanks @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 published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →