PHP JSON 処理のスニペット集

このページは、PHP の JSON 関連の処理のスニペットなどをまとめる予定のページです。

目次

注意

  • コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。

スニペット

エンコード (JSON 文字列化)

通常
echo json_encode($data);
日本語などのマルチバイト文字をそのまま出力 + 整形
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

デコード (JSON 文字列のパース)

オブジェクト (stdClass) で取得
$json = json_decode($jsonString);
連想配列で取得
$json = json_decode($jsonString, true);

JSON (application/json) のリクエストボディの取得

$inputString = file_get_contents('php://input');
$input = @json_decode($inputString, true);
  • $_POSTContent-Type に application/x-www-form-urlencoded あるいは multipart/form-data を用いた HTTP リクエスト が対象のため、application/json の場合は php://input からデータを取得します。

ユーティリティ関数

(主にフレームワークなどを使う必要が無い小さなプログラム用の関数です)

JSON出力

/**
 * JSONを出力します。
 * @param mixed $data 出力データ
 * @return void
 */
function echo_json($data){
    header('Content-Type: application/json');
    echo json_encode($data);
}

// 例:
// echo_json(array('a' => 1));

JSON データ取得

/**
 * 指定の URL に GET でリクエストし、JSONを取得します。
 *
 * @param string $url 対象URL
 * @param array $query クエリデータ
 * @param boolean $assoc JSONデータを連想配列で取得する場合 true
 * @return mixed JSONデータ (assoc が true の場合連想配列、false の場合 stdClass)。取得に失敗した場合 false
 */
function json_get($url, $query = array(), $assoc = false) {
    if ($query) $url .= ('?' . http_build_query($query, '', '&', PHP_QUERY_RFC3986));

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url); // URL
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // リクエスト先が https の場合、証明書検証をしない (環境によって動作しない場合があるため)
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
    $responseString = curl_exec($curl); // 応答データ取得
    curl_close($curl);
    return ($responseString !== false) ? json_decode($responseString, $assoc) : false;
}