做一个扩展 XPath Parser 的自定义解析器。我用 JsonPath Parser 做了类似的事情。在解析函数中,发生 json_decode 函数并将源转换为数组,然后查询该数组,因此您可以在 json_decode 调用之后和实际解析之前插入代码,以修改检索到的数据,在您的情况下, 删除不符合您需要的数组项。您必须弄清楚如何使用 XPath Parser 执行此操作,但工作流程不应该如此不同。如果您找到机会,只需扩展 Xpath Parser 类并在 parse 方法中完成您的工作。这是我做的,希望对你有帮助。
$array = json_decode($raw, TRUE);
// Support JSON lines format.
if (!is_array($array)) {
$raw = preg_replace('/}\s*{/', '},{', $raw);
$raw = '[' . $raw . ']';
$array = json_decode($raw, TRUE);
}
//ARRAY MODIFICATION - FIND THE ACTUAL VERSION AMENDMENT AND MOVE THEIR CONTENTS TO THE ROOT NODE
$fields_to_move = array("fullText","sameAs","memo","lawSection","actClause","currentCommittee","coSponsors","multiSponsors","uniBill","stricken","lawCode");
foreach ($array["result"]["items"] as &$item_result){
if($item_result["activeVersion"]=="")
foreach ($fields_to_move as $field_name)
$item_result[$field_name] = $item_result["amendments"]["items"][""][$field_name];
else foreach ($item_result["amendments"]["items"] as $item)
if($item["version"] == $item_result["activeVersion"]){
foreach ($fields_to_move as $field_name)
$item_result[$field_name] = $item[$field_name];
break;
}
}
//END OF ARRAY MODIFICATION
if (is_array($array)) {
require_once drupal_get_path('module', 'feeds_jsonpath_parser').'/jsonpath-0.8.1.php';
//more stuff
}