我试图访问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()
?
答案 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"
}
但输入是一样的。