| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
This is a JSONPath implementation for PHP based on Stefan Goessner's JSONPath script.
JSONPath is an XPath-like expression language for filtering, flattening and extracting data.
This project aims to be a clean and simple implementation with the following goals:
composer require softcreatr/jsonpath:"^0.5 || ^0.7 || ^0.8"| JSONPath | Result |
|---|---|
| $.store.books[*].author | the authors of all books in the store |
| $..author | all authors |
| $.store..price | the price of everything in the store. |
| $..books[2] | the third book |
| $..books[(@.length-1)] | the last book in order. |
| $..books[-1:] | the last book in order. |
| $..books[0,1] | the first two books |
| $..books[:2] | the first two books |
| $..books[::2] | every second book starting from first one |
| $..books[1:6:3] | every third book starting from 1 till 6 |
| $..books[?(@.isbn)] | filter all books with isbn number |
| $..books[?(@.price<10)] | filter all books cheaper than 10 |
| $..books.length | the amount of books |
| $..* | all elements in the data (recursively extracted) |
| Symbol | Description |
|---|---|
| $ | The root object/element (not strictly necessary) |
| @ | The current object/element |
| . or [] | Child operator |
| .. | Recursive descent |
| * | Wildcard. All child elements regardless their index. |
| [,] | Array indices as a set |
| [start:end:step] | Array slice operator borrowed from ES4/Python. |
| ?() | Filters a result set by a script expression |
| () | Uses the result of a script expression as the index |
<?php
require_once __DIR__ . '/vendor/autoload.php';
$data = ['people' => [
['name' => 'Sascha'],
['name' => 'Bianca'],
['name' => 'Alexander'],
['name' => 'Maximilian'],
]];
print_r((new \Flow\JSONPath\JSONPath($data))->find('$.people.*.name')->getData());
/*
Array
(
[0] => Sascha
[1] => Bianca
[2] => Alexander
[3] => Maximilian
)
*/<?php
require_once __DIR__ . '/vendor/autoload.php';
$data = json_decode('{"name":"Sascha Greuel","birthdate":"1987-12-16","city":"Gladbeck","country":"Germany"}', false);
print_r((new \Flow\JSONPath\JSONPath($data))->find('$')->getData()[0]);
/*
stdClass Object
(
[name] => Sascha Greuel
[birthdate] => 1987-12-16
[city] => Gladbeck
[country] => Germany
)
*/More examples can be found in the Wiki
The options flag JSONPath::ALLOW_MAGIC will instruct JSONPath when retrieving a value to first check if an object has a magic __get() method and will call this method if available. This feature is iffy and not very predictable as:
use Flow\JSONPath\JSONPath;
$myObject = (new Foo())->get('bar');
$jsonPath = new JSONPath($myObject, JSONPath::ALLOW_MAGIC);For more examples, check the JSONPathTest.php tests file.
Script expressions are not supported as the original author intended because:
So here are the types of query expressions that are supported:
[?(@._KEY_ _OPERATOR_ _VALUE_)] // <, >, <=, >=, !=, ==, =~, in and nin e.g. [?(@.title == "A string")] // [?(@.title = "A string")] // A single equals is not an assignment but the SQL-style of '==' [?(@.title =~ /^a(nother)? string$/i)] [?(@.title in ["A string", "Another string"])] [?(@.title nin ["A string", "Another string"])]
FlowCommunications/JSONPath is the predecessor of this library by Stephen Frank
Other / Similar implementations can be found in the Wiki.
A list of changes can be found in the CHANGELOG.md file.
This package is Treeware. If you use it in production, then we ask that you buy the world a tree to thank us for our work. By contributing to the ecologi project, you’ll be creating employment for local families and restoring wildlife habitats.
|
Sascha Greuel |
Loïc Leuilliot |
Sergey |
Alexandru Pătrănescu |
Oleg Andreyev |
Remy Suen |
|
esomething |
| Back | FazBrowse Home | New Git URL |