dongtingxiao4697 2016-09-09 11:25
浏览 157
已采纳

如何将字符串响应转换为JSON对象?

I'm calling a third party api using curl from a php function. I'm getting a response in JSON format (datatype is string). I want convert that response to an object or array. I have tried json_decode(), but I'm getting null. If I display response in browser and copy paste that string response in PHP variable, I get the value. So I can't figure out what the problem is.

Here is my code:

$fullUrl = 'http://example.com/api/assignment/1';
$data = AesCtr::encrypt($data, 'My Key', 256);
$curl = curl_init($fullUrl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, ['data' => $data]);
$curl_response = curl_exec($curl);
$curl_response = json_decode($curl_response);
echo '<pre>';
print_r($curl_response);

Here is response:

{"identifier":"id", "items":[{"apiResult":"INVALID", "apiResultMessage":"Invalid controls. the field 'resource' is mandatory the field 'type of item' is mandatory the field 'element id' is mandatory the field 'resource' is mandatory", "id":"", "idProject":"", "nameProject":"", "refType":"", "refId":"", "idResource":"", "nameResource":"", "idRole":"", "nameRole":"", "comment":"", "assignedWork":"", "realWork":"", "leftWork":"", "plannedWork":"", "rate":"", "realStartDate":"", "realEndDate":"", "plannedStartDate":"", "plannedEndDate":"", "dailyCost":"", "newDailyCost":"", "assignedCost":"", "realCost":"", "leftCost":"", "plannedCost":"", "idle":"", "billedWork":""}] }

I also have tried this

$curl_response = str_replace("'", "\'", $curl_response);
$curl_response = json_decode($curl_response);
  • 写回答

2条回答

  • duandao1931 2016-09-09 12:09
    关注

    Try this:-

    $curl_response = curl_exec($curl);
    
    function escapeJsonString($value) { 
        $escapers = array("\'");
        $replacements = array("\\/");
        $result = str_replace($escapers, $replacements, $value);
        return $result;
    }
    
    
    
    $curl_response = escapeJsonString($curl_response);
    
    $curl_response = json_decode($curl_response,true);
    
    echo '<pre>';print_r($curl_response);
    
    echo $error = json_last_error();
    

    Reference taken:- http://www.pontikis.net/tip/?id=5

    The link you found useful is:- https://stackoverflow.com/a/20845642/4248328

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题