Php 获取Json的参数

Php 获取Json的参数,php,json,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 $u

我试图访问一个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\u decode()

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

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

{
    "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\u 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"
}

但是输入是相同的。

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

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

{
    "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\u 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"
}

但是输入是相同的。

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

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

{
    "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\u 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"
}

但是输入是相同的。

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

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

{
    "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\u 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"
}


但是输入是相同的。

尝试
json\u解码($data,true)我已经试过了。如何在Json数组中回显参数?
print\u r
var\u dump
应该这样做。您缺少
user
上的索引。哦,是的,这更有意义。。。您创建了一个数组,其中包含一个具有相同密钥的json单元格!小心这些事情。试试json_解码($data,true)我已经试过了。如何在Json数组中回显参数?
print\u r
var\u dump
应该这样做。您缺少
user
上的索引。哦,是的,这更有意义。。。您创建了一个数组,其中包含一个具有相同密钥的json单元格!小心这些事情。试试json_解码($data,true)我已经试过了。如何在Json数组中回显参数?
print\u r
var\u dump
应该这样做。您缺少
user
上的索引。哦,是的,这更有意义。。。您创建了一个数组,其中包含一个具有相同密钥的json单元格!小心这些事情。试试json_解码($data,true)我已经试过了。如何在Json数组中回显参数?
print\u r
var\u dump
应该这样做。您缺少
user
上的索引。哦,是的,这更有意义。。。您创建了一个数组,其中包含一个具有相同密钥的json单元格!小心这些事情。没问题,你应该接受这个作为答案,然后没有问题,你应该接受这个作为答案,然后没有问题,你应该接受这个作为答案,然后没有问题,你应该接受这个作为答案