【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形式のデータを扱う方法を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

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

目次