Download the PHP package remorhaz/php-json-path without Composer

On this page you can find all versions of the php package remorhaz/php-json-path. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package php-json-path

PHP JSONPath

Latest Stable Version Build Scrutinizer Code Quality codecov Mutation testing badge Total Downloads License

JSONPath is a simple query language for JSON documents, inspired by XPath for XML and originally designed by Stefan Goessner.

Features

Requirements

Installation

You can use Composer to install this package:

Usage

Accessing JSON document

You can create accessible JSON document either from encoded JSON string or from decoded JSON data using corresponding node value factory:

Creating query

You should use query factory to create query from JSONPath expression:

Definite query is the query that defines exactly one path in document. If query includes any filters, wildcards or deep children scan, it is considered indefinite.

Addressable query is the query that returns unprocessed part(s) of the document. If query returns an aggregate function result, it is considered non-addressable.

Processing query

You should use an instance of query processor to execute queries on given JSON documents:

Selecting part of a JSON document

There are two ways to select part of JSON document using JSONPath query:

  1. You can get all matching parts in array, using ::select() method. This works with both definite and indefinite queries. You will get empty array if none of document parts matches your query.
  2. You can get exactly one matching part, using ::selectOne() method. Note that this works only with definite queries. You will get an exception if your query is indefinite.

Note that you can either encode result(s) of a selection to JSON string(s) or decode them to raw PHP data. Before accessing a result of ::selectOne() you can check it's existence with ::exists() method to avoid exception.

Deleting part of a JSON document

To delete part(s) of a JSON document use ::delete() method. It works only with addressable queries. You will get an exception if your query is non-addressable. If none of document parts match the query you will get the document unchanged. Special case is deleting root of a document - in this case you will get non-existing result.

Replacing the part of a JSON document with another JSON document

To replace part(s) of a JSON document with another JSON document use ::replace() method. It works only with addressable queries. You will get an exception if your query is non-addressable. If none of document parts match the query you will get the document unchanged. If the query matches nested parts of a document, you will also get an exception.

Grammar

All JSONPath queries start with abstract $ symbol that denotes outer level object. Internal structure can be matched with child operators and filters:

Operation Description
$ Root object of the JSON document.
.a Property a of current object (dot-notation).
..a Properties a of current and all it's nested objects.
['a'] Property a of current object (bracket-notation).
['a', 'b'] Properties a and b of current object.
[1, 3] Indexes 1 and 3 of current array.
[3:10:2] Sequence of indexes from 3 to 10 with step 2.
* Wildcard that matches any property of current object / index of current array.
[?(<expression>)] Filters values by expression.
.length() Aggregate function.

Child operators

There are two notations for selecting structure children: dot-notation and bracket-notation.

Dot-notation allows to select either exactly one property or all children (using a wildcard). Double-dot notation walks through the JSON structure recursively.

Example Description
$.a Selects property a of a root object.
$.* Selects all properties of a root objects or all elements of a root array.
$..a Selects property a of all objects recursively.
$..* Selects all properties/elements of all objects/arrays recursively.

Bracket-notation allows to select a set of properties/elements:

Example Description
$['a', 'b'] Selects properties a and b of a root object.
$[2, 3] Selects elements 2 and 3 from a root array.
$[3:10:2] Selects a sequence of elements from 3 up to 10 with step 2. This equivalent query is $[3, 5, 7, 9]. The notation is same as in Python.
$[*] Select all children. Same as $.*.

Aggregate functions

Aggregate functions can be appended to any path in query and it will return calculated value.

Function Description
.min() Returns minimal number from current array.
.max() Returns maximal number from current array.
.length() Returns amount of elements in current array.
.avg() Returns average value from numbers in current array.
.stddev() Returns standard deviation from numbers in current array.

The set of aggregate functions and idea itself is taken from Java implementation.

Filter expressions

When filter is being applied to nodeset, it leaves only those nodes for which the expression evaluates to true.

Example Description
$..a[?(@.b)] Selects all properties a that contain objects with property b.
$..a[?(@.b > 2)] Selects all properties a that contain objects with property b that is number greater than 2.
$..a[?(true)] Boolean true is the only literal that evaluates to true; so this query is equivalent to $..a.
$..a[?(1)] Attention! This evaluates to false, selecting nothing, because no automatic typecasting is performed.

Filter context

Expression @ points to the value to which the filter was applied.

Operators

Comparison operators can be used to compare value with another value or with a literal. Supported operators are: ==, !=, >, >=, < and <=. Brackets can be used for grouping, and logical operators &&, || and ! are also supported. Regular expressions can be matched using =~ operator.

Example Description
$..a[?(@.b == @.c)] Selects property a of any object that is object with properties b and c with equal values.
$..a[?(@.b || (@.c <= 1))] Selects property a of any object that is object with either property b or property c with int/float value lesser or equal to 1.
$..a[?(@.b =~ /^b/i)] Selects property a of any object that is object with string property b that starts from b or B.

Original definition

Goessner described JSONPath grammar with providing a set of example queries on JSON sample. Here's his original data sample:

And here are his original example queries with result descriptions:

Query Result Supported Comments
$.store.book[*].author The authors of all books in the store. Yes
$..author All authors. Yes
$.store.* All things in store, which are some books and a red bicycle. Yes
$.store..price The price of everything in the store. Yes
$..book[2] The third book. Yes
$..book[(@.length-1)] The last book in order. No Original implementation uses underlying script engine (JavaScript, in his case) in expressions. In case of PHP allowing to call arbitrary code from expression is unsafe, so script expressions are not implemented.
$..book[-1:] The last book in order. Yes
$..book[0,1] The first two books. Yes
$..book[:2] The first two books. Yes
$..book[?(@.isbn)] Filter all books with isbn number. Yes
$..book[?(@.price<10)] Filter all books cheapier than 10. Yes
$..* All members of JSON structure. Yes

All versions of php-json-path with dependencies

PHP Build Version
Package Version
Requires php Version ~8.1.0 || ~8.2.0 || ~8.3.0
ext-intl Version *
ext-json Version *
remorhaz/php-unilex Version ^0.5.3
remorhaz/php-json-data Version ^0.7
nikic/php-parser Version ^4.12 || ^5
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package remorhaz/php-json-path contains the following files

Loading the files please wait ....