0

我正在尝试使用 JSONPath 的 PHP 实现(http://goessner.net/articles/JsonPath/)处理一些解码的 json 数据。

我可以使用表达式在解码的 JSON 中查找数据,但我希望能够使用 JSONPath 表达式设置数据。有没有人能够在 PHP 中使用 JSONPath 做到这一点,如果可以,怎么做?

4

2 回答 2

3

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;
    }
}

感谢迈克布兰特的建议!

于 2013-11-12T17:22:01.510 回答
1

在简要查看文档时,似乎 JSONPath 不支持集合操作。如果有人这么倾向于,我想您可以修改 JSONPath 以可选地返回一个指针数组(即对象引用),resultType这样您就可以直接对这些值进行操作。

于 2013-11-12T16:37:24.987 回答