支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • PHPでJSON形式に変換するための

はじめに

PHPでは、データをJSON形式に変換するための関数を使用することができます。本記事では、その関数について主なオプションを含めた使い方を、使用例や出力結果と合わせて紹介します。その前に、まずはJSONの意味と、PHPでデータをJSON形式に変換する過程で使用する連想配列について説明します。

JSONとは

JSON(JavaScript Object Notation)は、PHPやJava、Ruby、Pythonなどの様々なプログラミング言語に対応するデータ記述言語です。つまり、JSONを使用することでプログラミング言語を問わずデータの受け渡しが可能となります。以下の例に示すように、JSONの基本的な構成は、オブジェクトと呼ぶ{…}の中に「”キー” : “値”」のペアが「,(カンマ)」で複数連結したものとなっています。

  {
       "name":"日本太郎",
       "age":30,
       "country":"日本",
       "city":"東京都"
   }

JSONで使用できる型は、文字列以外に数値や null、真偽値、オブジェクト、配列を使用することができます。オブジェクトと配列を使用した例を以下に示します。

オブジェクト

  {
       "id":"abcd",
       "pass":"a1234",
       "user_info":{
            "name":"日本太郎",
            "age":30
        }
   }

配列

  {
       "animals":["cat","dog","bird"]
   }

連想配列とは

通常の配列は、配列に格納している複数のデータの中から要素番号を指定してデータを取得します。それに対して、連想配列は、番号の代わりに文字をキーとして設定し、文字で指定したデータを取得することができる配列です。そのため、以下の例ではいずれも「猫 犬」という出力結果を得ることができます。

<?php
   //通常の配列
   $array=array('猫','犬');
   echo $array[0]." ".$array[1].PHP_EOL;
   //連想配列
   $acArray=array('動物1'=>'猫','動物2'=>'犬');
   echo $acArray['動物1']." ".$acArray['動物2'].PHP_EOL;
?>

PHPでのJSON形式への変換方法

PHPにおいて、JSON形式のフォーマットに値を変換するには、json_encode関数を使用します。json_encode関数の戻り値は、値の変換が成功するとJSON形式に変換された文字列を返し、失敗するとFALSEを返します。

json_encode関数の基本的な使い方

json_encode関数の書式は以下のとおりです

string json_encode ($value [,$options [$depth]]);
  • value - 引数valueには、JSON形式に変換する値を指定します。外部リソースへのリファレンスを保持するリソース型を除き、任意の型を指定できます。
  • options - JSON定数をオプションとして指定できます。
  • depth - 正の数で最大の深さを指定します。

json_encode関数の使用例は以下のとおりです。

<?php
   $user_array=array(
       'name'=>'日本太郎',
       'age'=>30,
       'country'=>'日本',
       'city'=>'東京');
    $json=json_encode($user_array);
    echo $json;
?>

上記を実行すると、以下のように出力されます。

{"name":"\u65e5\u672c\u592a\u90ce","age":30,"country":"\u65e5\u672c","city":"\u6771\u4eac"}

JSONの文字コードはUnicodeであるため、アルファベットは問題なく出力されますが、日本語はUnicode文字に変換され、「\u65e5\u672c(日本)」のように表現されています。しかし、json_encode関数では、オプションを指定することで、Unicode文字に変換されないようにできます。

オプション:JSON_UNESCAPED_UNICODE

JSON_UNESCAPED_UNICODEは、日本語をUnicodeにエンコードすることなく、そのままJSON形式に変換してくれます。

<?php
   $user_array=array(
       'name'=>'日本太郎',
       'age'=>30,
       'country'=>'日本',
       'city'=>'東京');
    $json=json_encode($user_array, JSON_UNESCAPED_UNICODE);  
    echo $json;
?>

上記のように、json_encode関数の引数にJSON_UNESCAPED_UNICODEを指定すると、以下のように表示されます。

 {"name":"日本太郎","age":30,"country":"日本","city":"東京"}

オプション:JSON_PRETTY_PRINT

JSON_UNESCAPED_UNICODEによって日本語が表現できるようになりましたが、横並びのため、ペアとペアの間が認識しにくいままです。そこで、JSON_PRETTY_PRINTを使用します。JSON_PRETTY_PRINTは、自動的に改行とインデントを付けてくれるオプションです。引数にオプションを複数指定する場合は、下記のようにオプション間を「|(Vertical bar)」で区切ります。

<?php
   $user_array=array(
       'name'=>'日本太郎',
       'age'=>30,
       'country'=>'日本',
       'city'=>'東京'); 
   $json=json_encode($user_array,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
   echo $json;
?>

上記を実行すると、以下のように出力されます。

 {
    "name": "日本太郎",
    "age": 30,
    "country": "日本",
    "city": "東京"
}

以上を踏まえて、前半の「JSONとは」で示した、オブジェクトや配列を値に保持するJSONデータをPHPで出力するには、以下のように記述します。

<?php
   $user_array=array(
       'id'=>'ABCD',
       'pass'=>'a1234',
       'user_info'=>array(
           'name'=>'日本太郎',
           'age'=>30,
           'favorite_animals'=>["猫","犬","鳥"]
       ),
    );
   $json=json_encode($user_array,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
   echo $json;
?>

上記を実行すると、以下のように出力されます。

 {
    "id": "ABCD",
    "pass": "a1234",
    "user_info": {
        "name": "日本太郎",
        "age": 30,
        "favorite_animals": [
            "猫",
            "犬",
            "鳥"
        ]
    }
}

まとめ

本記事では、PHPにおいてデータをJSON形式に変換するjson_encode関数の使い方を例を挙げつつ、紹介しました。使用例から分かるように、json_encode関数の使用方法はシンプルです。PHPの学習を開始して日が浅い方も試してみてはいかがでしょうか。