PHP JSONPath, XPath содержит фильтр - PullRequest
1 голос
/ 22 апреля 2011

Я использую JSONPath с PHP, и мне нужен 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);

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

Посмотрите на это

JSONPath: содержит фильтр

Я бы предположил, что в вашем случае это будет что-то вроде.

"$..members[?(/Management/.test(@['department']))";
0 голосов
/ 27 апреля 2011

Мне удалось понять это.В 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 () имеет третий параметр, который вызывает ошибки, установка значения на ноль работает нормально, см. http://code.google.com/p/jsonpath/issues/detail?id=8

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