【PHP入門】JSON形式にエンコードする方法(json_encode)

PHPでデータをJSON形式に変換するにはどうすればいいの?
そもそもJSONって何?
json_encodeの使い方について詳しく知りたい

PHPではあらゆる言語で共通して使用する、JSON形式のフォーマットに値を変換することができます。

この記事では、JSONの基本的な知識からjson_encodeを使用してJSON形式に変換する方法、JSON形式のデータを取得するjson_decodeの使い方などについて解説していきます。

※この記事ではPHPの「Version 7.1.1」で動作確認しました。

前提知識:JSON

そもそもJSONとは

JSON(JavaScript Object Notation)とは、JavaScriptの処理の中でオブジェクトを記述するためのデータ形式のことです。XMLのように簡潔に構造化されたデータを記述することが可能で、最も理解しやすいフォーマットと言えます。

JSON形式は「キーと値」のペアで成り立っていて、さまざまなプログラミング言語に対応しています。そのため、1つのJSON形式のデータを用意しておけばデータを共用することができます。

JSON形式についてもっと詳しく知りたい方は、以下のサイトを参照してください。
JavaScript Object Notation

JSONのデータ構造

JSONの構造以下のようになります。

{
    "名前": "田中",
    "誕生日": "1987年6月9日",
    "住所": "東京都渋谷区渋谷一丁目XXXX",
    "年齢": "30歳"
}
  • JSON形式は波括弧{…}で囲まれています。
  • 「キーと値」は"キー": "値"となっていて間にコロン(:)で区切られます。
  • 「キーと値」のペアとペアの間はカンマ(,)で区切られます。

1つのキーに複数登録する場合は、複数の値を配列のように角括弧[…]の中に記述し、値をカンマ(,)で区切ります。

{
    "フルーツ": [
        "りんご", 
        "オレンジ", 
        "メロン"
    ]
}

JSON形式に変換する方法

json_encodeの使い方

json_encode関数は、指定した値をJSON形式に変換した文字列を返します。

string json_encode( $値 [, JSON定数 [, 深さ = 512 ]] )
  • 第一引数にJSON形式に変換する値を指定します。
  • 第二引数にオプションとしてJSON定数を指定します。
  • 第三引数には最大の深さを指定します。正の数で指定する必要があります。
  • 戻り値にJSONエンコードされた文字列を返します。
  • 処理が失敗した場合はFALSEを返します。

※JSONの定義済み定数については、以下のPHPマニュアルで詳しく解説しています。
http://php.net/manual/ja/json.constants.php

実際にjson_encode関数で値を連想配列をJSON形式の文字列に変換する方法を見ていきましょう。「json.php」ファイルを作成して、以下の処理を記述します。

<?php

$value_array = ['value1'=>1, 'value2'=>2, 'value3'=>3, 'value4'=>4, 'value5'=>5];

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

echo $jsonstr;

?>

json.phpをブラウザで実行すると、以下のように表示されます。

{"value1":1,"value2":2,"value3":3,"value4":4,"value5":5}

改行を指定する

JSONコードに改行やインデントを指定する場合は、json_encode関数の第二引数にJSON定数のJSON_PRETTY_PRINTを指定します。

<?php

$value_array = ['value1'=>1, 'value2'=>2, 'value3'=>3, 'value4'=>4, 'value5'=>5];

//JSON_PRETTY_PRINTを指定して、改行とインデントを指定する
$jsonstr =  json_encode($value_array, JSON_PRETTY_PRINT);

print_r($jsonstr);

?>

実行すると、以下のように表示されます。

{
    "value1": 1,
    "value2": 2,
    "value3": 3,
    "value4": 4,
    "value5": 5
}

日本語で変換する方法

JSONは文字コードがUnicodeのため、日本語はUnicode文字に変換されてしまいます。例えば、以下のひらがなが含まれる配列をJSON形式に変換すると、「u3042u305fu30441〜」のような形式に変換されてしまいます。

$value_array = ['あたい1'=>1, 'あたい2'=>2, 'あたい3'=>3, 'あたい4'=>4, 'あたい'=>5];
{"u3042u305fu30441":1,"u3042u305fu30442":2,"u3042u305fu30443":3,"u3042u305fu30444":4,"u3042u305fu3044":5}

このように日本語をUnicode文字に変換すると、大変見づらくなるため、Unicodeに変換しないように指定する必要があります。そのためには、json_encode関数の第二引数にJSON定数のJSON_UNESCAPED_UNICODEを指定します。

JSON_UNESCAPED_UNICODEすれば、日本語はそのままでJSON形式に変換することが可能です。

<?php

$value_array = ['あたい1'=>1, 'あたい2'=>2, 'あたい3'=>3, 'あたい4'=>4, 'あたい'=>5];

$jsonstr =  json_encode($value_array, JSON_UNESCAPED_UNICODE);

print_r($jsonstr);

?>
{"あたい1":1,"あたい2":2,"あたい3":3,"あたい4":4,"あたい":5}

JSON形式のデータを取得する方法

json_decodeの使い方

JSON形式でエンコードされたデータを、デコードしてPHPで扱える変数に変換するには、json_decode関数を使用します。json_decode関数は以下のように記述します。

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

以下にJSON形式のデータを取得してjson_decode関数でデコードする簡単なサンプルを紹介します。


Array
(
    [key1] => value1
    [key2] => value2
    [key3] => value3
)

json_decode関数の詳しい使い方については、以下の記事で詳しく解説しています!

まとめ

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

  • JSONとは
  • JSONのデータ構造について
  • json_encodeを使用してJSON形式に変換する方法
  • json_decodeを使用してデータを取得する方法

などについて解説しました。JSONという言葉を初めて聞いた方もいるかもしれませんが、データをさまざまな言語で共通して使用するためには、共通したフォーマットが必要です。

そのフォーマットの1つとしてJSON形式があるということを、覚えておいてください。もし、JSON形式のデータを扱う方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。