出现htmlspecialchars()参数错误,如何提取JSON中Credits字段值?
问题解决方法
错误原因
你遇到的报错和无法获取值有两个核心问题:
json_decode()默认返回对象而非数组,用数组下标['Data']访问对象属性会触发类型错误;- 返回数据里的
Data是一个数组(包含单个元素),不能直接通过['Credits']访问,需要先取数组的第一个元素。
修复方案
提供两种可行的写法:
方案1:转为关联数组访问
给 json_decode() 传入第二个参数 true,将JSON转为关联数组,再按数组层级访问:
$get_balance = '{"ErrorCode":0,"ErrorDescription":"Success","Data":[{"PluginType":"SMS","Credits":"৳48.959915"}]}'; $balance = json_decode($get_balance, true); // 第二个参数true转为关联数组 echo $balance['Data'][0]['Credits']; // 先取Data数组的第一个元素,再取Credits
方案2:对象方式访问
保持 json_decode() 默认返回对象,使用对象属性访问符 ->,同时注意Data是数组,需先取索引0:
$get_balance = '{"ErrorCode":0,"ErrorDescription":"Success","Data":[{"PluginType":"SMS","Credits":"৳48.959915"}]}'; $balance = json_decode($get_balance); echo $balance->Data[0]->Credits; // 对象属性访问+数组索引
额外提示
如果你的原始返回数据包含HTML标签(比如<p>、<pre>),需要先提取出<code>标签内的JSON字符串,再进行解码,否则会导致JSON解析失败。可以用DOM解析提取核心JSON内容:
// 假设原始返回内容是$html $dom = new DOMDocument(); $dom->loadHTML($html); $codeTags = $dom->getElementsByTagName('code'); $jsonStr = $codeTags->item(0)->nodeValue; // 提取code标签内的JSON $balance = json_decode($jsonStr, true); echo $balance['Data'][0]['Credits'];
内容的提问来源于stack exchange,提问作者yasin konok
相关产品推荐
相关产品推荐

