通过PHP中的变量路径访问JSON

时间:2014-10-06 14:31:42

标签: php json

在PHP中,如何从变量路径获取JSON值?

这是一个示例json和一个带有2个参数的函数:一个json变量,并将路径拆分为键。

$myjson = json_decode('{
    "myKey1": {
        "myKey2": {
            "myKey3": {
                "myKey4": "myfinalvalue"
            }
        }
    }
}');

function getJSONValue($myjson, $pathkey) {
    // split path keys by ";"
    $myjson-> ?? $pathkey ??
}

echo getJSONValue($myjson, "myKey1;myKey2;myKey3;myKey4");
// Should display "myfinalvalue"

静态等价物将是:

$myjson->myKey1->myKey2->myKey3->myKey4;

我试过了:

$myjson->$pathkey

但不幸的是,它不起作用......

4 个答案:

答案 0 :(得分:2)

实际上,您的问题与JSON无关。这是从嵌套对象中获取值的方法:

function getValue($obj, $path) {
    foreach(explode(';', $path) as $key) {
        $obj = $obj->$key;
    }
    return $obj;
}

对于JSON部分,您的示例不是有效的JSON。它应该是这样的:

$myjson = json_decode('{
    "myKey1": {
        "myKey2": {
            "myKey3": {
                "myKey4": "myfinalvalue"
            }
        }
    }
}');

此外,php对象区分大小写,如果对象中有myKey,则路径字符串中应为myKey(而不是mykey)。

答案 1 :(得分:1)

function getJSONValue($myjson, array $pathkey) {
    foreach($pathkey as $val){
        $myjson = $myjson->{$val};
    }
    return $myjson;
}

$myjson = json_decode('{"myKey1": {"myKey2": {"myKey3": {"myKey4": "myfinalvalue"}}}}');


echo getJSONValue($myjson, ["myKey1","myKey2","myKey3","myKey4"]);

直播示例:http://codepad.viper-7.com/1G78Fi

答案 2 :(得分:0)

这样的事情:

function getJSONValue() {
  $args = func_get_args();
  $json = array_shift($args);
  $key = array_shift($args);
  $value = $json->$key;
  if(is_object($value)) {
    array_unshift($args, $value);
    return call_user_func_array('getJSONValue', $args);
  }
  return $value;
}

没有错误检查。

答案 3 :(得分:0)

好像你在混合使用PHP和JS。检查一下,看看如何创建一个Json字符串,然后从中获取一个onject,并访问键:

$myjson = json_encode(array(
    'myKey1' => array(
        'mykey2' => array(
            'mykey3' => array(
                'myKey4' => "myfinalvalue"
            )
        )
    )
));

$obj = json_decode($string);


echo $obj->myKey1->mykey2->mykey3->myKey4
// "myfinalvalue"

直接粘贴json:

$obj =  json_decode(
    '{
        myKey1: {
            mykey2: {
                mykey3: {
                    myKey4: "myfinalvalue"
                }
            }
        }
    }');

echo $obj->myKey1->mykey2->mykey3->myKey4
// "myfinalvalue"

为了更好地理解它,请阅读JSON_DECODE