Ramalingam Perumal
Ramalingam Perumal

Reputation: 1427

How to convert JSON string data into array using PHP?

I need convert JSON result to array in PHP. Here I am using the authorize.net payment gateway sandbox. I can get the response($result) in JSON string. But I will not convert to php array by using the json_decode

$output = json_decode($result,true); print_r($output);

Sample code

<?php
    $data=array("createTransactionRequest" => array(
                    "merchantAuthentication" => array(
                        "name" => "2bU77DwM",
                        "transactionKey" => "92x86d7M7f6NHK98"
                     ),
                     "refId" => "9898989898",
                     "transactionRequest" => array(
                        "transactionType" => "authCaptureTransaction",
                        "amount" => "25",
                        "payment" => array(
                            "creditCard" => array(
                                "cardNumber" => "5424000000000015",
                                "expirationDate" => "1220",
                                "cardCode" => "999"
                            )
                        )
                    )
                )
            );
    $data_string = json_encode($data);

    $ch = curl_init('https://apitest.authorize.net/xml/v1/request.api');
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data_string))
    );
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($ch);
    curl_close($ch);        
    print_r($result); //Print the JSON data

    //Try to convert JSON into array
    $output = json_decode($result,true); 
    print_r($output); //Print empty

JSON response from print_r($result);

http://www.jsoneditoronline.org/?id=c75c5a6a4c247ad2f0aaf7c801daad39

Upvotes: 1

Views: 869

Answers (1)

Ashok Chandrapal
Ashok Chandrapal

Reputation: 1020

Try below code you will get result.

<?php
    $data=array("createTransactionRequest" => array(
                    "merchantAuthentication" => array(
                        "name" => "2bU77DwM",
                        "transactionKey" => "92x86d7M7f6NHK98"
                     ),
                     "refId" => "9898989898",
                     "transactionRequest" => array(
                        "transactionType" => "authCaptureTransaction",
                        "amount" => "25",
                        "payment" => array(
                            "creditCard" => array(
                                "cardNumber" => "5424000000000015",
                                "expirationDate" => "1220",
                                "cardCode" => "999"
                            )
                        )
                    )
                )
            );
    $data_string = json_encode($data);

    $ch = curl_init('https://apitest.authorize.net/xml/v1/request.api');
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data_string))
    );
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($ch);
    curl_close($ch);        

// below is my code 
$final_result = json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $result), true );
echo "<pre>";
print_r($final_result);

?>

you just need to use
$output = json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $result), true );

print_r($output);

i have checked it! its working for me. Hope this will help!

Upvotes: 2

Related Questions