我正在尝试使用 JSONPath 的 PHP 实现(http://goessner.net/articles/JsonPath/)处理一些解码的 json 数据。
我可以使用表达式在解码的 JSON 中查找数据,但我希望能够使用 JSONPath 表达式设置数据。有没有人能够在 PHP 中使用 JSONPath 做到这一点,如果可以,怎么做?
我正在尝试使用 JSONPath 的 PHP 实现(http://goessner.net/articles/JsonPath/)处理一些解码的 json 数据。
我可以使用表达式在解码的 JSON 中查找数据,但我希望能够使用 JSONPath 表达式设置数据。有没有人能够在 PHP 中使用 JSONPath 做到这一点,如果可以,怎么做?
JSONPath 的这个实现似乎不支持集合操作。
我写了一个简单的函数,可以添加到 jsonPath.php 来添加这个功能。我把它贴在这里以防它可能对其他人有用:
/**
* @param array $obj Decoded json file to alter
* @param string $expr JSONPath expression (http://goessner.net/articles/JsonPath/)
* @param mixed $value Value to set all matching entries to
*/
function jsonPathSet(&$obj, $expr, $value)
{
$paths = jsonPath($obj, $expr, array('resultType' => 'PATH'));
$jsonPath = new JsonPath();
foreach ($paths as $path) {
$p = $jsonPath->normalize($path);
$keys = explode(';', $p);
$current = &$obj;
foreach ($keys as $key) {
if($key=='$') {
continue;
} else if (is_array($current)) {
$current = &$current[$key];
} else {
$current = &$current->$key;
}
}
$current = $value;
}
}
感谢迈克布兰特的建议!
在简要查看文档时,似乎 JSONPath 不支持集合操作。如果有人这么倾向于,我想您可以修改 JSONPath 以可选地返回一个指针数组(即对象引用),resultType
这样您就可以直接对这些值进行操作。