PHPでJSONを扱う簡単な方法

こんにちは!ぐちです。

JSON

JSONってご存知ですか??Javascript Object Notationの略語でwikipediaには以下のようにあります。

軽量なデータ記述言語の1つである。構文はJavaScriptにおけるオブジェクトの表記法をベースとしているが、JSONはJavaScript専用のデータ形式では決してなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しに使えるよう設計されている。

上記にあるようにサーバとクライアント間でのデータのやり取りによく使われています。

下記のような形式ですね。

{"name":"hoge","age":"30"}

PHPでJSONを扱うには

PHPでJSON形式のデータを扱うには下記の関数を使うことでPHPのオブジェクトと相互変換することができます。

  • json_decode
    • JSON形式の文字列からPHPのオブジェクトに変換します。
  • json_encode
    • PHPのオブジェクトからJSON形式の文字列に変換します。

json_decode

パラメータにJSON形式のデータを渡すことでPHPのオブジェクトを返してくれます。JSONのパース(解析)に失敗した場合はNULLを返します。

$json = '{"name":"hoge","age":"30"}';
var_dump(json_decode($json));

上記の結果は以下のようになります。

object(stdClass)#29 (2) {
  ["name"]=>
  string(4) "hoge"
  ["age"]=>
  string(2) "30"
}

第2引数にtrue(bool値)を指定することで連想配列として変換することができます。

$json = '{"name":"hoge","age":"30"}';
var_dump(json_decode($json, true));
array(2) {
  ["name"]=>
  string(4) "hoge"
  ["age"]=>
  string(2) "30"
}

下記の例では適切なJSON形式のデータではないためパースに失敗してNULLを返しています。

$json = 'aa';
var_dump(json_decode($json, true));
NULL

PHPオブジェクの変換後に要素にアクセスするには一般的な連想配列と同じようにアクセス可能です。

$obj = json_decode($json, true);
echo $obj['name'];

連想配列としてデコードしない場合は以下のようにオブジェクトとしてアクセスすることができます。

$obj = json_decode($json);
echo $obj->{'name'};

json_encode

パラメータにPHPのオブジェクトを渡すことでJSON形式の文字列データを返してくれます。

$obj = array('name' => 'hoge', 'age' => '30');
echo '<pre>';
echo json_encode($obj);
echo '</pre>';
{
    name: "hoge",
    age: "30"
}

配列も適切にJSON形式にしてくれます。

$obj = array('name' => 'hoge', 'age' => '30', 'hobbies' => array('suport','music'));
echo '<pre>';
echo json_encode($obj);
echo '</pre>';
{
    name: "hoge",
    age: "30",
    hobbies: [
        "suport",
        "music"
    ]
}

では今回はこの辺で。