peekmo / jsonpath
Library to use JsonPath
Installs: 2 460 068
Dependents: 16
Suggesters: 0
Security: 0
Stars: 72
Watchers: 9
Forks: 23
Open Issues: 12
Type:project
pkg:composer/peekmo/jsonpath
Requires
- php: >=5.3.3
Requires (Dev)
- phpunit/phpunit: ~4.1
This package is not auto-updated.
Last update: 2025-10-21 06:52:55 UTC
README
JsonPath utility (XPath for JSON) for PHP based on Stefan Goessner's implementation : http://code.google.com/p/jsonpath/
C php extension is in progress here, any help is welcome :)
Documentation
What is JsonPath ? What is the syntax ? Take a look to Stefan Goessner's documentation
Installation
- That's simple ! Add this to your composer.json :
    "require": {
        "peekmo/jsonpath": "dev-master"
    }
You just have to require the vendor/autoload.php (if not already) and add the following use :
use Peekmo\JsonPath\JsonStore;
How it works ?
/!\ API Breaking Changes with new version !
Consider this json :
{ 
    "store": {
        "book": [ 
            { 
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            { 
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {  
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {   
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    }
}
- Transform your json into array (it works with object, but use an array for better performances)
- You can get values like this :
<?php require_once __DIR__ . '/vendor/autoload.php'; // Autoload files using Composer autoload use Peekmo\JsonPath\JsonStore; $json = '...'; $store = new JsonStore($json); // Returns an array with all categories from books which have an isbn attribute $res = $store->get("$..book[?(@.isbn)].category"); $res = $store->get("$..book[?(@.isbn)].category", true); // You can set true to get only unique results ?>
It returns an array, you can so use default functions on the result (Have unique key for example) From 1.1.0, it returns an empty array if the node does not exists
- You can change a value like this :
<?php require_once __DIR__ . '/vendor/autoload.php'; // Autoload files using Composer autoload use Peekmo\JsonPath\JsonStore; $json = '...'; $store = new JsonStore($json); // Change the value of the first book's category $store->set("$..book[0].category", "superCategory"); echo $store->toString(); ?>
The value is passed by reference, so, when you are using a set, your object "$o" is modified. It returns a boolean to know if the node has been modified or not
- You can add a value like this :
<?php require_once __DIR__ . '/vendor/autoload.php'; // Autoload files using Composer autoload use Peekmo\JsonPath\JsonStore; $json = '...'; $store = new JsonStore($json); // Add a new value in first book's array "key":"value" $store->add("$..book[0]", "value", "key"); echo $store->toString(); ?>
The parameter "key" is optional, a number will be set if you're not providing one. It returns a boolean to know if the node has been modified or not
- You can remove an attribute like this :
<?php require_once __DIR__ . '/vendor/autoload.php'; // Autoload files using Composer autoload use Peekmo\JsonPath\JsonStore; $json = '...'; $store = new JsonStore($json); // Removes the attribute "category" from all books $store->remove("$..book.*.category"); echo $store->toString(); ?>
Thanks
- Special thanks to Stefan Goessner for his previous work