获取Json的参数

时间:2014-10-13 14:37:32

标签: php json

我试图访问Json对象的参数并在Json中有数组时遇到麻烦。

Example:
{
    "data":{
        "data_type": "getUsername",
        "user":"bla"
    }
}

$data = file_get_contents('php://input');
$data_back = json_decode($data);
$userName = $data_back->data->user;
echo $userName;

这很好用。但如果有一个数组使用了我改变

$data_back = json_decode($data); to $data_back = json_decode($data,true);

我无法访问任何数据。

Example:
{
    "data":{
        "data_type": "getUsername",
        "user":[{
                    "username":"a",
                    "username":"b"
                }]
    }
}

如果可能有数组,我应该使用哪种类型的json_decode()

1 个答案:

答案 0 :(得分:3)

您正在覆盖JSON中的相同属性:

{
    "data":{
        "data_type": "getUsername",
        "user":[{ // array containing 1 object
                    "username":"a", // with 2 properties with the same name
                    "username":"b"
                }]
    }
}

WANNA做的是:

{
    "data":{
        "data_type": "getUsername",
        "user":[
            { "username":"a"} ,
            { "username":"b"}
        ]
    }
}

然后你就可以访问它了:

echo $data_back->data->user[0]->username; // a
echo $data_back->data->user[1]->username; // b

您不需要将true传递给json_decode,因为您仍然可以将其作为对象进行访问。第二个参数的true和false之间的区别是,例如:

$json = '{"name":"Daniel"}';
$data1 = json_decode($json);
$data2 = json_decode($json, true);

var_dump($data1);
var_dump($data2);

// First one RETURNS an object:
object(stdClass)#1 (1) {
  ["name"]=>
  string(6) "Daniel"
}

// Second one returns an ARRAY:
array(1) {
  ["name"]=>
  string(6) "Daniel"
}

但输入是一样的。