スライドショースライドショー

【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形式にエンコード、デコードする方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説