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
相关产品推荐
相关产品推荐

