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

PHP解析SOAP响应时如何提取内嵌JSON的Respuesta字段值

问题根因

你现有代码已经成功提取到SOAP响应中<AutenticacionResult>节点存储的JSON格式字符串,但未对这段字符串做二次JSON解码,因此无法直接读取内部的Respuesta字段值。

修正方案

在现有代码逻辑基础上,对提取到的JSON字符串增加一次解码操作即可拿到目标token,修正后的完整代码如下:

$response = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
$xml = new SimpleXMLElement($response);
$body = $xml->xpath('//soapBody')[0];
$array = json_decode(json_encode((array)$body), TRUE); 
// 对内嵌的JSON字符串做二次解码,转为关联数组
$authInfo = json_decode($array['AutenticacionResponse']['AutenticacionResult'], true);
// 直接读取目标字段
$token = $authInfo['Respuesta'];
echo $token;

更简洁的实现方式

不需要把XML对象反复转码成数组,直接通过XPath定位目标节点读取内容即可,代码更简洁性能更好:

// 处理XML命名空间前缀
$response = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
$xml = new SimpleXMLElement($response);
// 直接定位到存储认证结果的节点
$resultNode = $xml->xpath('//AutenticacionResult')[0];
// 解码节点内的JSON内容
$authInfo = json_decode((string)$resultNode, true);
$token = $authInfo['Respuesta'];
注意事项
  • 调用json_decode时传入第二个参数true,会将解码结果返回为关联数组,方便直接通过键名取值
  • 读取SimpleXMLElement节点的文本内容时,建议强制转换为string类型,避免返回XML对象导致JSON解码失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:15:31