如何从JSON结构取ci、whid值?json_decode报stdClass转字符串错误
JSON字段取值方法与类型转换报错解决方案
报错核心诱因
- 原始JSON未作为合法PHP字符串传入
json_decode:直接把JSON字面量写在赋值语句右侧,PHP语法无法识别,会触发解析阶段的类型转换错误 - 解码后得到的stdClass对象未按语法规则取属性,直接将整个对象当做字符串参与输出、拼接操作,就会触发“stdClass类对象无法转换为字符串”的错误提示
正确操作步骤
- 构造合法的JSON字符串
错误写法会直接导致解析异常:
正确写法需将JSON内容用引号包裹为字符串类型:// 错误:直接将JSON结构作为变量值赋值,不符合PHP语法 $info = {"ioc":true,"sid":3702088,"ci":3508,"cp":{"id":93006,"t":102,"s":true},"pr":25000,"whid":31472}$jsonString = '{"ioc":true,"sid":3702088,"ci":3508,"cp":{"id":93006,"t":102,"s":true},"pr":25000,"whid":31472}'; - 调用解码函数处理字符串
给json_decode传入第二个参数true,可将解码结果转为关联数组,降低取值语法门槛:$decodedData = json_decode($jsonString, true); - 提取目标字段值
- 数值3508对应的字段为
ci - 数值31472对应的字段为
whid
数组形式取值示例:
若使用默认的对象返回模式(不传第二个参数$targetCi = $decodedData['ci']; // 输出结果为3508 $targetWhid = $decodedData['whid']; // 输出结果为31472true),需按对象属性语法取值:$decodedObject = json_decode($jsonString); $targetCi = $decodedObject->ci; $targetWhid = $decodedObject->whid; - 数值3508对应的字段为
报错排查注意事项
- 每次解码后可通过
json_last_error()检查是否存在格式问题,避免拿到null值继续操作触发后续报错 - 入参必须是字符串类型,禁止直接把数组、对象传入
json_decode - 不要在未取具体属性的情况下,直接把stdClass对象参与字符串拼接、输出操作
内容的提问来源于stack exchange,提问作者Alfaz
相关产品推荐
相关产品推荐

