Похоже, что эта реализация 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-> set ($ expr, $ value)' как сигнатуру метода, которая будет работать с текущим объектом JsonPath. –