4

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);
8
  • JSON string seems valid, json-parser.com/a7826645 try to check the JSON decoding error message using json_last_error_msg() Commented Sep 9, 2016 at 11:27
  • Please don't randomly boldface parts of your question, it makes it much harder to read. Commented Sep 9, 2016 at 11:30
  • @Anant, I have showed response in question. Commented Sep 9, 2016 at 11:32
  • @AlokPatel, I know that the JSON is valid. But my question is that then why I can't decode it? Commented Sep 9, 2016 at 11:35
  • @Anant, Yes, that is the response. But remember that it is in string datatype. Here it looks like object because I have copy/paste from browser. Commented Sep 9, 2016 at 11:37

2 Answers 2

3

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

Sign up to request clarification or add additional context in comments.

1 Comment

problem solved. I got solution from here. See comment the most common part.
1

Try add second param "assoc" for getting array to json_decode function:

$curl_response = json_decode($curl_response, true);

Hope it'll help.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.