JsonPath

JsonPath with PHP updated from Stefan Goessner's implementation

  • Owner: Peekmo/JsonPath
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

JsonPath

Bitdeli Badge

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

Main metrics

Overview
Name With OwnerPeekmo/JsonPath
Primary LanguagePHP
Program languagePHP (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2013-10-26 15:40:29
Pushed At2017-10-24 18:45:46
Last Commit At2015-04-30 07:56:14
Release Count3
Last Release Namev2.0-ALPHA (Posted on 2014-09-16 22:04:27)
First Release Name1.0.0 (Posted on )
用户参与
Stargazers Count72
Watchers Count9
Fork Count23
Commits Count32
Has Issues Enabled
Issues Count13
Issue Open Count10
Pull Requests Count5
Pull Requests Open Count2
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private