peekmo / jsonpath
用于使用 JsonPath 的库
v2.0-ALPHA
2014-09-16 20:02 UTC
Requires
- php: >=5.3.3
Requires (Dev)
- phpunit/phpunit: ~4.1
This package is not auto-updated.
Last update: 2024-09-10 01:17:44 UTC
README
基于 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 的先前工作