json_encode将我的数组更改为stdClass对象,这是正常的吗?

时间:2016-02-04 08:29:24

标签: php json

我有这段代码:

<?php

$array = array ( array ('pcs'=>'23', 'kg'=>'3'),
                 array ('pcs'=>'24', 'kg'=>'4'),
                 array ('pcs'=>'25', 'kg'=>'5'));

echo '<pre>';

print_r($array);

$array = json_encode($array);

echo $array;

$array = json_decode($array);

echo '<pre>';

print_r($array);
?>

以及输出:

Array
(
    [0] => Array
        (
            [pcs] => 23
            [kg] => 3
        )

    [1] => Array
        (
            [pcs] => 24
            [kg] => 4
        )

    [2] => Array
        (
            [pcs] => 25
            [kg] => 5
        )

)
[{"pcs":"23","kg":"3"},{"pcs":"24","kg":"4"},{"pcs":"25","kg":"5"}]
Array
(
    [0] => stdClass Object
        (
            [pcs] => 23
            [kg] => 3
        )

    [1] => stdClass Object
        (
            [pcs] => 24
            [kg] => 4
        )

    [2] => stdClass Object
        (
            [pcs] => 25
            [kg] => 5
        )

)

为什么我的数组变为stdClass Object?我可以像数组一样操纵stdClass Object吗?

更新:当我尝试回复$array[0]['pcs']

时,我收到此错误
Fatal error:  Cannot use object of type stdClass as array in /home/*** on line **

4 个答案:

答案 0 :(得分:4)

“问题”与json_encode没有任何共同之处,而是json_decode

这将返回一个数组:

$array = json_decode($array, true);

答案 1 :(得分:1)

来自PHP Manual

  

json_decode()用于解码JSON字符串:

TRUE中使用第二个参数作为json_decode()

  

返回的对象将被转换为关联数组。

为您解决方案:

$array = json_decode($array,TRUE); // use second param as TRUE in your code.

理解的一些基本示例:

示例1:

<?php
$json = '{"test":"test","test2":"test2"}'; // json string

echo "<pre>";
print_r(json_decode($json)); // without using second param    
?>

结果(作为对象返回):

stdClass Object
(
    [test] => test
    [test2] => test2
)

示例2:

<?php
$json = '{"test":"test","test2":"test2"}';

echo "<pre>";
print_r(json_decode($json,TRUE)); // with second param true    
?>

<强>结果:

Array
(
    [test] => test
    [test2] => test2
)

答案 2 :(得分:0)

那是标准的PHP行为。 json_decode()会将传入的数据转换为类stdClass的对象数组。

你仍然可以访问所有元素,但你必须做更多的OOP:

echo $array[0]->pcs;
echo $array[0]->kg;

如果您希望json_decode()重现您的初始数组,请使用该函数的第二个选项:

$array = json_decode($array, true);
echo $array[0]['pcs'];
echo $array[0]['kg'];

答案 3 :(得分:0)

  

这是正常吗?

,因为json_decode基本上会返回一个对象,因为你没有指定第二个参数,所以它应该返回一个对象,而不是一个数组。

According to docs

  

当为TRUE时,返回的对象将被转换为关联数组。

所以要使它返回一个数组,就是使第二个参数等于true。

$array = json_decode($array,true);