【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形式に変換すると、「\u3042\u305f\u30441〜」のような形式に変換されてしまいます。

$value_array = ['あたい1'=>1, 'あたい2'=>2, 'あたい3'=>3, 'あたい4'=>4, 'あたい'=>5];
{"\u3042\u305f\u30441":1,"\u3042\u305f\u30442":2,"\u3042\u305f\u30443":3,"\u3042\u305f\u30444":4,"\u3042\u305f\u3044":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

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

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

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