【json_encode/json_decode】PHPでJSONを扱う方法

PROGRAM

今回は、PHPでJSONを扱う方法について、json_encode関数で配列からJSON化する方法とjson_decode関数でJSONから配列化する方法に分け、簡単に解説していきます。

配列からJSON化する方法

PHPの配列や連想配列をJSON化するには、標準関数のjson_encodeを使います。

json_encode関数では、第一引数に指定した配列もしくは連想配列をJSON形式の文字列に変換できます。

$arr = array("name"=>"山田","age"=>22,"gender"=>"男性");
header('content-type: application/json; charset=utf-8');
echo json_encode($arr); // '{"name":"山田","age":22,"gender":"男性"}'と出力

上記のコードでは、このjson_encode関数を使って、nameやage、genderのキーとその値を持つ連想配列をJSON形式の文字列に変換しています。

JSONから配列化する方法

JSONからPHPの配列や連想配列にするには、標準関数のjson_decodeを使います。

json_decode関数では、第二引数をtrueにしたうえで第一引数にJSON形式の文字列を指定することで、配列もしくは連想配列に変換できます。

$json = '{"name":"山田","age":22,"gender":"男性"}';
$arr = json_decode($json,true); // 'array("name"=>"山田","age"=>22,"gender"=>"男性")'と代入

上記のコードでは、このjson_decode関数を使って、nameやage、genderのキーとその値を持つJSON形式の文字列をPHPの連想配列に変換しています。

実際にJSONを使うケース

JSONは異なる言語やシステムとデータを連携するために活用される文字列形式のデータです。

そのため、PHPでは主に、データを転送するcurl関連の関数と一緒に使われるケースが非常に多いです。

    $params = array(); // POSTするリクエストデータを配列で作成
    $url = "http://hoge.com/api"; // APIのURL
    $data = json_encode($params); // POSTするリクエストデータの配列をJSON化
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $result = curl_exec($ch);
    curl_close($ch);
    
    $arr = json_decode($result,true); // レスポンスデータのJSONを配列化

上記のコードでは、curl関連の関数を使って、リクエストデータとして配列のデータをJSON化したうえで、特定のAPIのURLに対しそのJSONをPOSTし、レスポンスデータとしてJSONを受け取り、最後に配列化しています。