peekmo/jsonpath

用于使用 JsonPath 的库

安装次数: 2,285,088

依赖关系: 14

建议者: 0

安全: 0

星标: 72

关注者: 10

分支: 24

公开问题: 12

类型:项目

v2.0-ALPHA 2014-09-16 20:02 UTC

This package is not auto-updated.

Last update: 2024-09-10 01:17:44 UTC


README

Bitdeli Badge

基于 Stefan Goessner 实现的 JsonPath 工具 (XPath for JSON) 用于 PHP : http://code.google.com/p/jsonpath/

C php 扩展正在进行中 这里,任何帮助都受欢迎 :)

文档

什么是 JsonPath?语法是什么?请参阅 Stefan Goessner 的文档

安装

  • 很简单!将以下内容添加到您的 composer.json 中
    "require": {
        "peekmo/jsonpath": "dev-master"
    }

您只需引入 vendor/autoload.php(如果尚未引入)并添加以下使用

    use Peekmo\JsonPath\JsonStore;

它是如何工作的?

/!\ 新版本中的 API 破坏性更改!

考虑以下 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
        }
    }
}
  • 将您的 json 转换为 数组(它也适用于对象,但为了更好的性能请使用数组)
  • 您可以获取以下值
    <?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

    ?>

它返回一个数组,因此您可以使用默认的 函数 对结果进行处理(例如,具有唯一的键)从 1.1.0 版本开始,如果节点不存在,则返回空数组

  • 您可以像这样更改一个值
    <?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();

    ?>

值是通过引用传递的,因此,当您使用 set 时,您的对象 "$o" 将被修改。它返回一个布尔值以知道节点是否已修改

  • 您可以像这样添加一个值
    <?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();

    ?>

"key" 参数是可选的,如果不提供,将设置一个数字。它返回一个布尔值以知道节点是否已修改

  • 您可以像这样删除一个属性
    <?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();

    ?>

谢谢

  • 特别感谢 Stefan Goessner 的先前工作