【问题标题】:Uncaught Error: Cannot use object of type stdClass as array未捕获的错误:不能将 stdClass 类型的对象用作数组
【发布时间】:2018-07-07 06:10:54
【问题描述】:

致命错误:未捕获的错误:不能使用 stdClass 类型的对象作为数组

$code = json_decode($src);
echo $code["items"];

var_dump 显示以下内容(截断):

object(stdClass)#7 (3) { ... } 

我不知道stdClass是什么以及如何使用它。

编辑:

stdClass 是一个创建简单对象实例的类。将使用-> 而非[...] 表示法访问类的属性。

根据json_decode 的文档,只需将第二个参数设置为true 将导致结果为关联数组,进而可以像数组一样访问。

在发布这个问题时,我没有尝试搜索如何解码 JSON - 因为这很简单,而且我得到了它的工作。我刚刚收到另一个错误(上图),并且没有运气搜索如何解决这个问题。我相信人们也有类似的问题,因为这个问题也得到了一些看法。

【问题讨论】:

标签: php arrays json stdclass


【解决方案1】:

使用json_decode($src, true)获取关联数组。

这是首选方式,因为目前你得到混合数组和对象,你可能最终陷入疯狂的房子,试图使用这些:)

或者使用-> 运算符来获取对象的属性。

目前您的商品在:

$code->items[0]->pagemap->cse_image[0]->src

【讨论】:

  • @huykon225 是的,json_decode() 需要第一个参数是json字符串
【解决方案2】:

json_decode 函数有第二个参数专门用于此目的:将其设置为 true 将返回一个关联数组,其中有一个 JSON 对象(在 { "curly": "braces" } 中)。

为了说明:

$a = json_decode('{ "b": 1 }', false);
var_dump($a->b);
// prints: int(1)

$a = json_decode('{ "b": 1 }', true);
var_dump($a['b']);
// prints: int(1)

请注意访问值的方式不同。

延伸阅读:http://php.net/json_decode

【讨论】:

  • 郑重声明,这个答案没有错。证明:sandbox.onlinephpfunctions.com/code/… 通常我会中和这个反对票,但是这个答案对教育几乎没有什么作用,而且 Rauli 的答案更全面,有两种方法可以纠正问题。 (ob-ivan 你可以删除这个问题来恢复你失去的 2 个代表点)
  • @mickmackusa 谢谢你的建议。事实上,我很感谢任何对此投反对票的人,因为它提醒我 SO 存在 great 答案,而不是快速答案。不过,我想我会把它留在这里——记录在案。
  • 如果您要留下答案,请更新它以提供更多/有用的独特信息。如果它对其他人有帮助,您可能会获得中立投票等等。
  • @mickmackusa 谢谢。引用官方文档时很难提供独特的信息。我希望它至少能比原版更好地消化特定主题。
  • 请在每个var_dump 下方添加格式化的“评论”以表达输出。喜欢:// output: blah,blah
猜你喜欢
  • 2023-04-03
  • 2013-07-05
  • 1970-01-01
  • 2012-03-29
  • 2011-10-12
  • 1970-01-01
  • 2019-12-11
相关资源
最近更新 更多