You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用对象语法访问带数字键JSON数据的问题

为什么PHP中用对象语法访问数字键的JSON属性会失败?

你遇到的问题核心是PHP对象的属性命名规则和JSON解析后的结构差异,以下是具体原因和解决方法:

1. JSON解析的两种模式差异

json_decode() 默认会把JSON字符串解析为 stdClass 对象,但如果传入第二个参数 true,会解析为关联数组:

  • 数组允许使用数字作为键名,所以你用 $jsonobj['inverters'][0]['AC'][0]['Power']['v'] 能正常运行;
  • 但对象模式下,属性名如果是纯数字(比如你的AC下的0),不能直接用常规的->语法访问。

2. 两种错误写法的问题

  • $jsonobj->inverters[0]->AC[0]->Power->v 失败原因:这里你把AC当作数组来用下标[0]访问,但AC在对象模式下是stdClass实例,不是数组。stdClass没有实现数组访问的接口,所以对对象使用数组下标会触发错误。
  • $jsonobj->inverters[0]->AC->0->Power->v 失败原因:PHP的标识符(包括对象属性名)不能以数字开头,直接写->0会被语法解析器当成数字字面量,而非属性名,直接触发语法错误。

3. 正确的对象语法访问方式

要访问数字命名的对象属性,必须用花括号包裹属性名,让PHP明确识别这是一个属性名,而非数字:

$jsonobj->inverters[0]->AC->{0}->Power->v

总结

本质是PHP语法规则限制了直接使用数字作为对象属性的访问方式,而关联数组没有这个限制,所以数组模式下可以直接用数字键访问。

内容的提问来源于stack exchange,提问作者BeeJayF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:14:53