CodeIgniter中处理Soap客户端返回JSON:移除GetCodeResult层级
解决SOAP响应移除GetCodeResult层级的问题
完全懂你的需求!你已经用CodeIgniter搭好SOAP客户端拿到了数据,现在只需要简单几步就能把外层的GetCodeResult去掉,直接拿到里面的价格数据。
处理步骤(两种常见场景)
场景1:响应是JSON字符串
如果Web服务返回的是JSON格式字符串,解码后直接提取目标层级就行:
// 假设$rawResponse是从Web服务获取的原始响应 $rawResponse = '{"GetCodeResult": { "Selling":"1000.67114", "Buying":"9000.65789" } }'; // 把JSON转成关联数组(第二个参数设为true) $responseArray = json_decode($rawResponse, true); // 直接提取GetCodeResult对应的内容 $cleanData = $responseArray['GetCodeResult']; // 如需转回JSON格式 $finalJson = json_encode($cleanData); // 此时$finalJson就是你要的格式:{"Selling":"1000.67114","Buying":"9000.65789"}
场景2:响应是SOAP对象
如果CodeIgniter的SOAP客户端直接返回对象(比如用内置SOAP类或第三方库),处理更直接:
// 假设$soapClient是你的SOAP客户端实例,调用接口后得到$result对象 $result = $soapClient->GetCode(); // 直接提取对象的GetCodeResult属性 $cleanData = $result->GetCodeResult; // 转成JSON格式的话 $finalJson = json_encode($cleanData);
额外提示:增加容错处理
为了避免响应结构变化导致报错,建议加上存在性检查:
// 数组场景的容错 if (isset($responseArray['GetCodeResult'])) { $cleanData = $responseArray['GetCodeResult']; } else { // 设置默认值或记录日志 $cleanData = ['Selling' => 0, 'Buying' => 0]; } // 对象场景的容错 if (property_exists($result, 'GetCodeResult')) { $cleanData = $result->GetCodeResult; } else { $cleanData = (object) ['Selling' => 0, 'Buying' => 0]; }
这样就能稳稳拿到你想要的格式啦!
内容的提问来源于stack exchange,提问作者Didos Rukundo
相关产品推荐
相关产品推荐

