ajayvohra2005/hack-jmespath

在Hacklang中进行JMESPath搜索

v1.0.1 2021-09-20 20:30 UTC

This package is auto-updated.

Last update: 2024-09-21 02:58:13 UTC


README

概览

Hack包允许您使用JMESPath查询语言从JSON文档中搜索和提取元素。

要求

HHVM 4.123及更高版本。

安装

  • 通过Git克隆此仓库

  • 安装composer

  • 在此仓库的根目录下运行以下命令

      composer install
    

要使用此包,

    composer require ajayvohra2005/hack-jmespath

运行测试

安装后,在仓库的根目录下运行以下命令

    ./vendor/bin/hacktest tests/

示例代码

以下是一个使用JMESPath查询表达式搜索json文档的示例

use namespace HackJmesPath;

<<__EntryPoint>>
function jmespath_example(): void {
  require_once(__DIR__.'/../vendor/autoload.hack');
  \Facebook\AutoloadMap\initialize();

    $json = '{
        "people": [
        {
            "name": "Jeff",
            "age": 33,
            "state": {"name": "up"}
        },
        {
            "name": "Bill",
            "age": 51,
            "state": {"name": "down"}
        },
        {
            "name": "Luna",
            "age": 42,
            "state": {"name": "up"}
        }
        ]
    }';

    $espression = "sort_by(people, &age)[].name";
    $result = HackJmesPath\jmespath_search($espression, $json);

    var_dump($result);
}

它将产生以下预期的输出

vec(3) {
  string(4) "Jeff"
  string(4) "Luna"
  string(4) "Bill"
}

更多示例

有关完整测试用例和更多示例,请参阅tests/TreeInterpreterTest.hack

解码JSON数据类型

JSON 'object'类型必须由Hack dict表示。不支持使用stdClass作为JSON 'object'。这意味着如果您使用Hack内置函数json_decode(),函数调用中的第二个参数必须是true,以便使用关联数组。

JMESPath查询语言

请参阅JMESPath教程以了解有关JMESPath json查询语言的详细信息。

致谢

此代码的部分灵感来自PHP的JMESPath包。有关版权声明,请参阅各个源代码文件。