我使用json_decode()得到一个奇怪的错误。它正确解码数据(我看到它使用print_r),但当我试图访问数组内的信息时,我得到:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
我只想做:$result['context']其中$result有json_decode()返回的数据
如何读取这个数组中的值?
我使用json_decode()得到一个奇怪的错误。它正确解码数据(我看到它使用print_r),但当我试图访问数组内的信息时,我得到:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
我只想做:$result['context']其中$result有json_decode()返回的数据
如何读取这个数组中的值?
当前回答
函数json_decode()默认返回一个对象。
你可以像这样访问数据:
var_dump($result->context);
如果你有像from-date这样的标识符(在使用上面的方法时,连字符会导致PHP错误),你必须写:
var_dump($result->{'from-date'});
如果你想要一个数组,你可以这样做:
$result = json_decode($json, true);
或者将对象转换为数组:
$result = (array) json_decode($json);
其他回答
它不是数组,而是stdClass类型的对象。
你可以像这样访问它:
echo $oResult->context;
更多信息在这里:什么是stdClass在PHP?
您必须使用->访问它,因为它是一个对象。
更改您的代码:
$result['context'];
To:
$result->context;
正如Php手册所说,
print_r -打印关于变量的人类可读信息
当我们使用json_decode();时,我们得到一个stdClass类型的对象作为返回类型。 要在print_r()内部传递的参数应该是数组或字符串。因此,不能在print_r()中传递对象。我找到了两种处理方法。
将对象强制转换为数组。 这可以通过以下方式实现。 $a =(数组)$object 通过访问对象的键 如前所述,当您使用json_decode();函数,它返回一个stdClass对象。您可以在-> Operator的帮助下访问对象的元素。 $value = $object->key;
第一,如果对象有嵌套数组,也可以使用多个键来提取子元素。
$value = $object->key1->key2->key3...;
它们还有print_r()的其他选项,如var_dump();和var_export ();
另外,如果你设置了json_decode()的第二个参数;为true时,它将自动将对象转换为数组(); 以下是一些参考资料: http://php.net/manual/en/function.print-r.php http://php.net/manual/en/function.var-dump.php http://php.net/manual/en/function.var-export.php
今天遇到同样的问题,是这样解决的:
如果你调用json_decode($somestring),你会得到一个对象,你需要访问像$ Object ->key,但如果你调用json_decode($somestring, true),你会得到一个字典,可以访问像$array['key']
为了从json字符串中得到一个数组,你应该将第二个参数设置为boolean true。
$result = json_decode($json_string, true);
$context = $result['context'];
否则$result将是一个std对象。但是您可以以对象的形式访问值。
$result = json_decode($json_string);
$context = $result->context;