由于SOAP客户端默认返回XML响应,我需要获得JSON响应而不是XML。
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
在这种情况下,需要在SOAPClient或SOAPHeader中设置哪个属性才能返回JSON响应?
答案 0 :(得分:3)
从我从一些研究中发现的内容来看,SoapClient没有任何内置的方法可以直接将数据作为JSON返回(其他人都知道如果我错了,它会节省很多事后处理!)因此您可能需要获取XML返回的数据并手动解析。
我记得SimpleXMLElement提供了一些有用的功能,当然,有人在php.net上有一些代码段就可以做到这一点:http://php.net/manual/en/class.simplexmlelement.php
<?php
function XML2JSON($xml) {
function normalizeSimpleXML($obj, &$result) {
$data = $obj;
if (is_object($data)) {
$data = get_object_vars($data);
}
if (is_array($data)) {
foreach ($data as $key => $value) {
$res = null;
normalizeSimpleXML($value, $res);
if (($key == '@attributes') && ($key)) {
$result = $res;
} else {
$result[$key] = $res;
}
}
} else {
$result = $data;
}
}
normalizeSimpleXML(simplexml_load_string($xml), $result);
return json_encode($result);
}
?>
答案 1 :(得分:2)
SOAP仅支持XML消息格式。
如果您尝试连接的SOAP服务器是您无法直接访问的第三方服务器,则必须在收到后将XML响应转换为JSON,如此示例here
如果您希望您的Web服务服务器支持不同的数据类型,例如json,您需要查看RESTful web services.
答案 2 :(得分:1)
如果您的结果是PHP数组格式,例如:
object(stdClass)#2(6){[&#34; category_id&#34;] =&gt; int(1)[&#34; parent_id&#34;] =&gt; int(0)[&#34; name&#34;] =&gt; string(12)&#34; Root Catalog&#34; [&#34;位置&#34;] =&GT; INT(0)..........
然后您可以使用
将其解析为JSON//result is the variable with php array value
$JSON = json_encode($result);
print_r($JSON);
详细了解, 观看 - https://www.youtube.com/watch?v=isuXO5Cv6Lg