我使用了一个奇怪的错误json_decode().它正确解码数据(我看到它使用print_r),但当我尝试访问数组内的信息时,我得到:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
Run Code Online (Sandbox Code Playgroud)
我只是想做:返回的数据$result['context']在哪里$resultjson_decode()
如何读取此数组中的值?
Jon*_*Jon 732
使用第二个参数json_decode使其返回一个数组:
$result = json_decode($data, true);
Run Code Online (Sandbox Code Playgroud)
sve*_*ens 196
该函数json_decode()默认返回一个对象.
您可以像这样访问数据:
var_dump($result->context);
Run Code Online (Sandbox Code Playgroud)
如果你有像这样from-date的标识符(使用上述方法时连字符会导致PHP错误)你必须写:
var_dump($result->{'from-date'});
Run Code Online (Sandbox Code Playgroud)
如果你想要一个数组,你可以这样做:
$result = json_decode($json, true);
Run Code Online (Sandbox Code Playgroud)
或者将对象强制转换为数组:
$result = (array) json_decode($json);
Run Code Online (Sandbox Code Playgroud)
JiN*_*xus 137
您必须使用它来访问它,->因为它是一个对象.
更改您的代码:
$result['context'];
Run Code Online (Sandbox Code Playgroud)
至:
$result->context;
Run Code Online (Sandbox Code Playgroud)
San*_*hal 84
使用true作为第二个参数json_decode.这会将json解码为关联数组而不是stdObject实例:
$my_array = json_decode($my_json, true);
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅文档.
Ale*_*nko 81
今天有同样的问题,这样解决了:
如果你打电话,json_decode($somestring)你将得到一个对象,你需要访问$object->key,但如果你打电话,json_decode($somestring, true)你会得到一个字典,并可以访问$array['key']
Wes*_*orp 59
它不是数组,它是stdClass类型的对象.
您可以像这样访问它:
echo $oResult->context;
Run Code Online (Sandbox Code Playgroud)
更多信息:PHP中的stdClass是什么?
Mil*_*ani 26
正如Php手册所说,
print_r - 打印有关变量的可读信息
当我们使用时json_decode();,我们得到一个stdClass类型的对象作为返回类型.要在其中传递的参数print_r()应该是数组或字符串.因此,我们无法传递内部的对象print_r().我找到了两种方法来解决这个问题.
将对象转换为数组.
这可以如下实现.
$a = (array)$object;
Run Code Online (Sandbox Code Playgroud)通过访问Object的键
如前所述,当您使用json_decode();function时,它返回一个stdClass的Object.您可以在->Operator 的帮助下访问对象的元素.
$value = $object->key;
Run Code Online (Sandbox Code Playgroud)一,如果对象具有嵌套数组,也可以使用多个键来提取子元素.
$value = $object->key1->key2->key3...;
Run Code Online (Sandbox Code Playgroud)
他们也是其他选择print_r(),比如var_dump();和var_export();
PS:另外,如果设置了json_decode();to 的第二个参数true,它会自动将对象转换为array();
以下是一些引用: 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
inf*_*sud 23
要从 json 字符串获取数组作为结果,您应该将第二个参数设置为布尔值 true。
$result = json_decode($json_string, true);
$context = $result['context'];
Run Code Online (Sandbox Code Playgroud)
否则 $result 将是一个 std 对象。但是您可以将值作为对象访问。
$result = json_decode($json_string);
$context = $result->context;
Run Code Online (Sandbox Code Playgroud)
Rob*_*lor 14
有时在使用 API 时,您只想将对象保持为对象。要访问具有嵌套对象的对象,您可以执行以下操作:
我们假设当您打印对象时,您可能会看到:
print_r($response);
stdClass object
(
[status] => success
[message] => Some message from the data
[0] => stdClass object
(
[first] => Robert
[last] => Saylor
[title] => Symfony Developer
)
[1] => stdClass object
(
[country] => USA
)
)
Run Code Online (Sandbox Code Playgroud)
要访问对象的第一部分:
print $response->{'status'};
Run Code Online (Sandbox Code Playgroud)
这将输出“成功”
现在让我们来看看其他部分:
$first = $response->{0}->{'first'};
print "First name: {$first}<br>";
Run Code Online (Sandbox Code Playgroud)
预期输出将是带有换行符的“Robert”。
您还可以将对象的一部分重新分配给另一个对象。
$contact = $response->{0};
print "First Name: " . $contact->{'first'} . "<br>";
Run Code Online (Sandbox Code Playgroud)
预期输出将是带有换行符的“Robert”。
访问下一个键“1”的过程是相同的。
print "Country: " . $response->{1}->{'country'} . "<br>";
Run Code Online (Sandbox Code Playgroud)
预期输出将是“美国”
希望这将帮助您理解对象以及为什么我们要将对象保留为对象。您不需要将对象转换为数组来访问其属性。
cod*_*one 13
尝试这样的事情!
而不是获取像这样的上下文:(这适用于获取数组索引)
$result['context']
Run Code Online (Sandbox Code Playgroud)
尝试(这项工作用于获取对象)
$result->context
Run Code Online (Sandbox Code Playgroud)
其他示例是:(如果$result有多个数据值)
Array
(
[0] => stdClass Object
(
[id] => 15
[name] => 1 Pc Meal
[context] => 5
[restaurant_id] => 2
[items] =>
[details] => 1 Thigh (or 2 Drums) along with Taters
[nutrition_fact] => {"":""}
[servings] => menu
[availability] => 1
[has_discount] => {"menu":0}
[price] => {"menu":"8.03"}
[discounted_price] => {"menu":""}
[thumbnail] => YPenWSkFZm2BrJT4637o.jpg
[slug] => 1-pc-meal
[created_at] => 1612290600
[updated_at] => 1612463400
)
)
Run Code Online (Sandbox Code Playgroud)
然后试试这个:
foreach($result as $results)
{
$results->context;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
577543 次 |
| 最近记录: |