JsonPath

JsonPath with PHP updated from Stefan Goessner's implementation

  • 所有者: Peekmo/JsonPath
  • 平台:
  • 許可證: MIT License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

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

主要指標

概覽
名稱與所有者Peekmo/JsonPath
主編程語言PHP
編程語言PHP (語言數: 1)
平台
許可證MIT License
所有者活动
創建於2013-10-26 15:40:29
推送於2017-10-24 18:45:46
最后一次提交2015-04-30 07:56:14
發布數3
最新版本名稱v2.0-ALPHA (發布於 2014-09-16 22:04:27)
第一版名稱1.0.0 (發布於 )
用户参与
星數72
關注者數9
派生數23
提交數32
已啟用問題?
問題數13
打開的問題數10
拉請求數5
打開的拉請求數2
關閉的拉請求數0
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?