Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP JSONPath,XPath包含筛选器_Php_Json_Jsonpath - Fatal编程技术网

PHP JSONPath,XPath包含筛选器

PHP JSONPath,XPath包含筛选器,php,json,jsonpath,Php,Json,Jsonpath,我在PHP中使用JSONPath,并且需要与contains过滤器“contains(dept,'Management')”等效的xpath 我有以下JSON,我只想将员工过滤到管理部门。如果department节点仅包含1个department,则没有问题,但我需要在department字符串中找到关键字 任何帮助都将不胜感激 { "staff": { "members": [ { "firstname": "J",

我在PHP中使用JSONPath,并且需要与contains过滤器“contains(dept,'Management')”等效的xpath

我有以下JSON,我只想将员工过滤到管理部门。如果department节点仅包含1个department,则没有问题,但我需要在department字符串中找到关键字

任何帮助都将不胜感激

{ 
    "staff": {
        "members": [ 
            { 
            "firstname": "J",
                "lastname": "H",
                "department": "Management, Finance"
            },
            { 
                "firstname": "S",
                "lastname": "M",
                "department": "Finance"
            }
        ]
    }
}

$parser->setPath("$..members[?(@['department']=='Management')]");
$staff = $parser->getData();
var_dump($staff);
看看这个

我想你的情况会是这样的

"$..members[?(/Management/.test(@['department']))";

我设法弄明白了。有一些使用PHP strpos的例子,但这在最初使用jsonpath-0.8.1.PHP时并不适用

我给出了jsonpath-0.8.3.php,发现存储库和strpos表达式工作得非常好:-

$..members[?(@ && @['department'] && strpos(@['department'],'".$dept."')!==false)]
注意,函数evalx()还有第三个参数会导致错误,将该值设置为null可以正常工作,请参阅


我试过“$…成员[?(/Management/(@['department'])”,但不确定格式,我将替换什么。test是什么?这也是特定于javaScript的吗?@rossjha是的,它是特定于javaScript的。我不知道您使用的是什么xpath.php php php解析器,但请查看它们提供的表达式,以及是否有“类似”的内容,或者在上面的示例中可以使用正则表达式(test是一个函数)感谢Elijan,在这里找到的示例中:-有使用strpos的示例,我可以在jsonpath.php文件中看到有一个eval函数,但仍然使用语法。尝试了以下操作:“$…成员。[(@&&&@[\'department\']&&strpos(@[\'department\'],\'Management\')!==false)]”但是没有乐趣。按照建议使用Michal Migurski的JSON解析器,所以我也会看看这个。
function evalx($x, $v, $vname=null)