【PHP入門】JSONのデータを処理する方法(json_encode/json_decode)

PHPではデータをJSON形式に変換したり、JSON形式をデコードする関数が用意されています。

この記事ではそんなPHPのJSONについて、

・json_encodeでデータをJSON形式に変換する方法
・日本語をJSON形式にエンコードする方法
・json_decodeでJSON形式のデータをデコードする方法

などの基本的な内容から、

・JSON形式のデータをPOSTで外部サイトへ送信する方法

などの応用的な使い方についても解説します。

ここでは、そんなJSON形式の処理について詳しく解説いたします!

目次

JSONとは?

1
なんかJSONって言葉をちらほらと聞くけどJSONっていったい何者?

 

2
JSONとは、「JavaScript Object Notation」の略で、JavaScriptの処理でオブジェクトを記述するための書式のことを言うんだ。

 
1
うーん・・・イマイチよくわからないなぁ。

 
 
2
つまりJSONとはXMLやCSVファイルのように、簡潔に構造化されたデータを記述することが可能なんだよ。

 

1
そーなんだ。具体的にはどんな内容なの?

 

2
具体的にJSON形式は「キーと値」のペアで成り立っていて、JSON形式のデータを用意しておけば、データを共用して使用することが可能になるんだ。

 
1
つまり、JSONを使えば異なる言語のプログラム間でデータのやりとりが簡単にできるってことね♪

 

2
まぁざっくりとそんな感じだね!
ここではPHPでデータをJSON形式に変換する方法や、JSON形式でエンコードされたデータを元に戻す方法について解説していくよ。

json_encodeとは

指定した値をJSON形式に変換するには、json_encode関数を使用します。

json_encode関数は以下のように記述します。

書き方:

string json_encode( $値 [, JSON定数 [, 深さ = 512 ]] )

引数:
第一引数にはJSON形式に変換するための文字列や配列を指定します。
第二引数を指定した場合は、どのような形式で変換するか、オプションで定数を指定することができます。

JSONの定義済定数については、以下のページを参照してください。
http://php.net/manual/ja/json.constants.php

第三引数を指定する場合は、最大の深さを正の数で指定することができます。

返り値:
json_encode関数は、戻り値にJSONエンコードされた値を返し、処理が失敗した場合はFALSEを返します。

注意点:
変換する全ての文字列データは文字コードUTR-8にエンコードされていなければいけません。

json_encodeの使い方

ここではjson_encode関数を使用して、指定した文字列の値をJSON形式に変換する方法を見ていきましょう。

以下に簡単なサンプルプログラムを紹介します。

サンプルプログラム

//配列を作成
$fruits_array = ['apple'=>'fruits1',
                 'orange'=>'fruits2',
                 'melon'=>'fruits3',
                 'pineapple'=>'fruits4',
                 'Strawberry'=>'fruits5'
                ];
 
//配列をJSON形式に変換
$jsonstr =  json_encode($fruits_array);
 
echo $jsonstr;

実行結果:

{"apple":"fruits1","orange":"fruits2","melon":"fruits3","pineapple":"fruits4","Strawberry":"fruits5"}

1
実行結果を見てみると文字列と文字列の間にコロン(:)があって、それぞれカンマ(,)区切られているわね!

 

2
JSONは「キーと値」のペアとして構成されていることは説明したけど、json_encodeを使うと「キー:値, キー:値」のようにキー:値のペアがカンマ(,)で区切られているJSON形式に変換してくれるんだ!

 

1
なるほど!思ったより簡単ね!

 

2
そんなjson_encode関数のさまざまな使い方や、日本語に変換する方法については、以下の記事でも詳しく解説してるから参考にしてみるよいいよ。

json_encodeのさらに詳しい使い方はこちらの記事で解説しています!

日本語をjson_encodeする

日本語が含まれる配列をjson_encodeでエンコードすると、日本語が文字コードで表示されてしまいます。

そのため、日本語をjson_encodeするには、第二引数にJSON_UNESCAPED_UNICODEを指定します。

JSON_UNESCAPED_UNICODEを指定すると、マルチバイト文字をそのままの形式で扱います。

サンプルプログラム

//配列を作成
$fruits_array = ['apple'=>'りんご',
                 'orange'=>'オレンジ',
                 'melon'=>'メロン',
                 'pineapple'=>'パイナップル',
                 'Strawberry'=>'ストロベリー'
                ];

//配列をJSON形式に変換
$jsonstr = json_encode($fruits_array, JSON_UNESCAPED_UNICODE);

echo $jsonstr;

実行結果:

{"apple":"りんご","orange":"オレンジ","melon":"メロン","pineapple":"パイナップル","Strawberry":"ストロベリー"}

json_decodeとは

JSON形式にエンコードされた文字列を受け取って、デコードするにはjson_decode関数を使用します。

デコードとは、簡単に説明するとエンコードされたデータを元に戻すことを言います。

json_decode関数は、以下のように記述します。

書き方:

json_decode ( string $JSON文字列 [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

引数:
第一引数にはデコード対象のJSON文字列を指定します、以降の引数は各種オプションを指定します。

assoc:TRUEの場合は連想配列の形式で返されます。
depth:ユーザー指定の再帰の深さを指定します。
options:JSONデコードオプションのビットマスクを指定します。

返り値:
JSONエンコードされたデータを、適切なPHPの型として返します。

デコードを失敗したり、再起制限を超えている場合はNULLを返します。

json_decodeの使い方

ここではjson_decode関数を使用して、指定した文字列の値をデコードする方法を見ていきましょう。

以下に簡単なサンプルプログラムを紹介します。

サンプルプログラム

//配列を作成
$fruits_array = ['apple'=>'fruits1',
                 'orange'=>'fruits2',
                 'melon'=>'fruits3',
                 'pineapple'=>'fruits4',
                 'Strawberry'=>'fruits5'
                ];

//配列をJSON形式に変換
$jsonstr =  json_encode($fruits_array);

//JSON形式を元に戻す
$fruits = json_decode($jsonstr, true);

print_r($fruits);

実行結果:

Array
(
    [apple] => fruits1
    [orange] => fruits2
    [melon] => fruits3
    [pineapple] => fruits4
    [Strawberry] => fruits5
)

1
json_decodeを使えばJSON形式のデータを配列に戻せるってことね♪

 

2
でもひとつ決まりがあって、json_decodeの返り値を連想配列で受け取るためには、第二引数をTRUEで指定する必要があるから気をつけてね!

 

1
わかりました!

 

JSON形式のデータをPOSTで送信する

JSON形式のデータをPOSTで送信することも可能です。

以下のサンプルではcURL関数を使用して、指定したサーバにJSON形式のデータをPOSTで送信しています。

サンプルプログラム

//配列を作成
$fruits_array = ['apple'=>'fruits1',
                 'orange'=>'fruits2',
                 'melon'=>'fruits3',
                 'pineapple'=>'fruits4',
                 'Strawberry'=>'fruits5'
                ];

//配列をJSON形式に変換
$jsonstr =  json_encode($fruits_array);

//セッションを初期化する
$ch = curl_init();

//オプションの設定
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonstr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://www.xxx.xxx');

//セッションの実行
$res = curl_exec($ch);

//結果を表示する
var_dump($res);

//セッションを終了する
curl_close($ch);

cURL関数による外部サイトとの送受信を行う処理の詳細については、以下の記事で詳しく解説しています!

まとめ

ここではJSON形式のデータを扱うために、

・json_encodeでデータをJSON形式に変換する方法
・日本語をJSON形式にエンコードする方法
・json_decodeでJSON形式のデータをデコードする方法
・JSON形式のデータをPOSTで外部サイトへ送信する方法

などについて解説しました。

JSON形式は、外部サイトやプログラム間でデータをやりとりするときに便利な形式ですので、この機会にぜひ覚えておきましょう!

もし、JSON形式にエンコード、デコードする方法を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次