ajayvohra2005 / hack-jmespath
在Hacklang中进行JMESPath搜索
v1.0.1
2021-09-20 20:30 UTC
Requires
- hhvm: ^4.123
- hhvm/hhvm-autoload: ^3.3
Requires (Dev)
- facebook/fbexpect: ^2.8
- hhvm/hacktest: ^2.2
- hhvm/hhast: ^4.123
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包。有关版权声明,请参阅各个源代码文件。