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

PHP如何访问json_decode解析得到的JSON对象内的元素?

PHP解析JSON无法访问元素的解决方法

你出现报错的核心原因是对解析后的数据结构认知有误,先明确json_decode默认返回的结构:你提交的JSON本身是包含4个独立stdClass对象的索引数组,每个数组元素仅包含1个属性,不存在跨元素的键/属性。

之前错误写法的报错原因

  • $obj['texto']:$obj是索引数组,根级别不存在texto字符串索引,因此报undefined index texto
  • $obj->{'texto'}:$obj是数组类型不是对象,尝试获取对象属性时报trying to get property of non object
  • $obj[0]['texto']:$obj[0]是stdClass对象,不是数组,用数组下标访问对象属性时报undefined index texto
  • 直接输出$obj[0]:stdClass对象无法直接转为字符串输出,报Object of class stdClass could not be converted to string

方法1:保持当前解析逻辑不变,按结构访问属性

对应你现在的解析写法$obj = json_decode($_POST['sentJson']);,直接用数组下标->属性名的方式访问即可:

// 访问tipo属性
echo $obj[0]->tipo;
// 访问activo属性
echo $obj[1]->activo;
// 访问titulo属性
echo $obj[2]->titulo;
// 访问texto属性
echo $obj[3]->texto;

方法2:解析为纯数组格式访问

如果习惯用数组下标访问所有内容,给json_decode加第二个参数true,会将所有JSON对象转为PHP关联数组:

// 第二个参数设为true,返回数组而非stdClass对象
$obj = json_decode($_POST['sentJson'], true);
// 访问对应属性
echo $obj[0]['tipo'];
echo $obj[3]['texto'];

额外优化建议

你当前的JSON结构是将每个属性单独封装为对象放到数组中,实际业务中更推荐把所有属性放到同一个对象里,结构如下:

{"tipo":"","activo":"","titulo":"Servicoasd B","texto":"asdasdasd"}

这种结构解析后可以直接访问属性:

$obj = json_decode($_POST['sentJson']);
echo $obj->texto;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:45:03