PHP JSONPath,XPath包含过滤器

时间:2011-04-22 12:07:03

标签: php json jsonpath

我使用JSONPath和PHP,我需要xpath等效于包含过滤器,“contains(dept,'Management')”;

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

任何帮助都将不胜感激。

{ 
    "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);

2 个答案:

答案 0 :(得分:2)

看看这个

JSONPath :contains filter

我认为在你的情况下会是这样的。

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

答案 1 :(得分:0)

我设法解决了这个问题。在http://jsonpath.googlecode.com/svn/trunk/tests/jsonpath-test-php.php中有一些使用PHP strpos的例子,但这对我来说最初使用jsonpath-0.8.1.php不起作用。

我给了jsonpath-0.8.3.php找到了存储库,并且strpos表达式完美运行: -

$..members[?(@ && @['department'] && strpos(@['department'],'".$dept."')!==false)]

注意,函数evalx()有第三个参数导致错误,将值设置为null工作正常,请参阅http://code.google.com/p/jsonpath/issues/detail?id=8

function evalx($x, $v, $vname=null)