1

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

我有以下 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);
4

2 回答 2

2

看这个

JSONPath:包含过滤器

我会假设在你的情况下会是这样的。

"$..members[?(/Management/.test(@['department']))";
于 2011-04-22T12:49:16.823 回答
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)
于 2011-04-27T08:45:46.620 回答