webservice调用后,json_decode返回NULL

66

使用json_encodejson_decode时出现了奇怪的行为,我找不到解决办法:

我的php应用程序调用了一个php web服务。该web服务返回的json看起来像这样:

var_dump($foo):
string(62) "{"action":"set","user":"123123123123","status":"OK"}"

现在我想要在我的应用程序中解码JSON:

$data = json_decode($foo, true)

但它返回NULL

var_dump($data):
NULL
我使用php5。 来自webservice的响应Content-Type是"text/html; charset=utf-8"(也尝试使用"application/json; charset=utf-8")。 可能的原因是什么?
24个回答

0
我遇到了这个问题,当我调用一个SOAP方法来获取我的数据并返回一个JSON字符串时,我尝试使用json_decode解码,但始终得到null。
由于我使用nusoap进行SOAP调用,我尝试直接返回JSON字符串,现在我可以使用json_decode。但是,由于我确实需要使用SOAP调用来获取我的数据,所以我在包含nusoap之前添加了ob_start(),这样我的调用就生成了JSON字符串,在返回JSON字符串之前,我使用了ob_end_clean(),并解决了我的问题 :)
示例
//HRT - SIGNED
//20130116
//verifica se um num assoc deco é valido
ob_start();
require('/nusoap.php');
$aResponse['SimpleIsMemberResult']['IsMember'] = FALSE;
if(!empty($iNumAssociadoTmp))
{
    try
    {
        $client = new soapclientNusoap(PartnerService.svc?wsdl',
         array( 
            // OPTS 
            'trace' => 0,
            'exceptions' => false,
            'cache_wsdl' => WSDL_CACHE_NONE
         )
        );
    //MENSAGEM A ENVIAR
    $sMensagem1 = '
        <SimpleIsMember>
            <request>
                <CheckDigit>'.$iCheckDigitAssociado.'</CheckDigit>
                <Country>Portugal</Country>
                <MemberNumber">'.$iNumAssociadoDeco.'</MemberNumber>
            </request>
        </SimpleIsMember>';
    $aResponse = $client->call('SimpleIsMember',$sMensagem1);
    $aData = array('dados'=>$aResponse->xpto, 'success'=>$aResponse->example);
    }
}
ob_end_clean();
return json_encode($aData);

0

我不知道为什么?但这个可以工作:

$out = curl_exec($curl);
    $out = utf8_encode($out);
    $out = str_replace("?", "", $out);
if (substr($out,1,1)!='{'){
    $out = substr($out,3);
}
    $arResult["questions"] = json_decode($out,true);

没有使用utf8_encode() - 不起作用


0
有时候,当内容被压缩时会出现问题,因此添加 Accept-Encoding: identity 头部可以解决问题,而无需处理响应。
   $opts = array(
        'http' =>
            array(                    
                'header'  =>
                    array(
                        'Accept-Encoding: identity',
                    ),
            ),           
    );

    $context = stream_context_create($opts);

    $contents = file_get_contents('URL', false, $context);

-4
我曾经遇到过类似的问题,后来在 json_encode 字符串周围添加了单引号 '' 后解决了。以下是我的 js 文件代码:
var myJsVar  = <?php echo json_encode($var); ?> ;    -------> NOT WORKING  
var myJsVar = '<?php echo json_encode($var); ?>' ;    -------> WORKING

我只是想发帖,以防像我一样的人意外遇到这篇文章 :)


这没有意义,你需要一个字符串来使用JS中的eval。问题是关于json_encode调用失败的。 - Ruan Mendes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接