0

I am using PHP with cURL to make requests to an API.

The API responds with an encrypted string which I then have to use json_decode on and run it through a pre-defined decrypt method that returns a string.

So I have something like this:

echo $response; 
$decodedResponse = json_decode($response, true);

// New instance of Decrypt
$decrypt =  new Decrypt();
$decryptedResponse = $decrypt->decrypt($decodedResponse);
echo $decryptedResponse;

Using var_dump($decryptedResponse) yields string(960) but the string looks like a JSON array.

{"Title":"Mr","Forenames":"Steve"}

So what is the best way to rip apart this string so that I can use the variables through an associative array?

I had already tried:

foreach(decryptedResponse as $data)
{
    echo $data['Title'];
}

But this outputted nothing on the screen.

Am I misinterpreting the use of json_decode?

As many have stated it seems you have to decode twice, I'll look into this and share my findings.

3
  • i know nothing of Decrypt, but the string that you dumped looks like a json encoded array. Have you tried json_decode($decryptedResponse); ? Commented Nov 23, 2017 at 14:42
  • Can't replicate the problem 3v4l.org/Xj51O Commented Nov 23, 2017 at 14:45
  • If the decoded string looks like JSON, have you tried to json_decode() it? Commented Nov 23, 2017 at 14:57

3 Answers 3

1

You need to json_decode again on the decrypt result

$decodedResponse = json_decode($response, true);

// New instance of Decrypt
$decrypt =  new Decrypt();
$decryptedResponse = $decrypt->decrypt($decodedResponse);

$decryptedArry = json_decode($decryptedResponse, true);
var_dump($decryptedArry);
echo $decryptedArry['Title'];
Sign up to request clarification or add additional context in comments.

Comments

0
As you told Using `var_dump($decryptedResponse)` yields string(960) but the string looks like a JSON   means your decrypt duration convert it again json. You can try bellow code it may resolve your issue
    $decodedResponse = json_decode($response, true);
    // New instance of Decrypt
    $decrypt =  new Decrypt();
    $decryptedResponse = $decrypt->decrypt($decodedResponse);
    $decryptedResponse = json_decode($response, true);
    foreach(decryptedResponse as $data)
    {
        echo $data['Title'];
    }

Comments

0

The code below shows that the json_decode works like you want it to but it seems like your Decryption class does something weird.

$response = '{"Title":"Mr","Forenames":"Steve"}';
$decodedResponse = json_decode($response, true);

var_dump($decodedResponse);
echo $decodedResponse["Title"];

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.