PHPでjsonを読み込み、出力する方法

20/01/11 17:17:53     20/01/21 22:59:00

JSONはJavaScript Object Notationの略で、JavaScriptで書かれたデータ形式です。JavaScriptで書かれているのですが、PHPでも使用できます。

読み込むことも出力することも可能なので、その方法について解説していきます。

JSONとは

JSONの概要は上記の通りですが、問題は具体的にどのような内容になっているのかです。そこで、まずはサンプルを紹介します。

{
  "身長": "170cm",
  "体重": "80kg",
  "足のサイズ": "27cm",
  "服のサイズ": "L~XL"
}

このように、{}で囲み、キーと値をセットで記述しています。JSONと言うとなんとなく大げさで難しそうな感じがしますが、実際のデータ構造は至ってシンプルです。

また、一つのキーに対して複数の値を設定することも可能です。

{
  "身長":
    "160cm",
    "170cm",
    "180cm"
}

JSONを読み込む

JSON形式のデータを取得するには、json_decode関数を使用します。この関数はPHPのコードになります。json_decode関数の構文は以下です。

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

json_decode関数を使用したサンプルコードは以下です。

//配列を作成
$key_value_array = ['key1'=>'value1',
        'key2'=>'value2',
        'key3'=>'value3'
        ];

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

//JSON形式のデータをデコードする
$key_value = json_decode($jsonstr, true);

print_r($key_value);

このコードを実行すると以下のようになります。

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

JSON形式だったデータが、普通のPHPの配列に変換されました。

JSON形式に変換して出力する方法

次に、逆にデータをJSON形式に変換して出力する方法です。JSON形式に変換するには、json_encode関数を使用します。

上でJSON形式からPHPの配列形式に変換するにはjson_encode関数を使用すると説明しましたが、PHPの配列形式からJSON形式に変換する際はjson_encode関数を使用します。

json_encode関数の構文は以下です。

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

この構文を使用したサンプルコードは以下です。

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

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

このコードを実行すると、以下のように出力されます。

{“value1″:1,”value2″:2,”value3″:3,”value4″:4,”value5”:5}

値とキーがセットになっている、JSON形式に変換されました。またこのサンプルコードではキーと値がすべて一列になって出力されましたが、改行を指定して出力することもできます。サンプルコードは以下です。

<?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形式に変換する

JSONはコードの指定ができるので、日本語をJSONに変換することも可能です。そのためにはjson_encode関数の第二引数に「JSON_UNESCAPED_UNICODE」を指定します。

サンプルコードは以下です。

<?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_encode関数の第二引数を指定しないと以下のようになります。

$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}

JSONはデフォルトではUnicodeに変換される仕様になっているので、日本語をUnicodeに変換した文字列が出力されました。Unicodeだとデータの中身がなんなのかよくわかりません。

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

JSON形式への変換、JSON形式からの変換方法について解説してきましたが、最後にJSON形式のデータを送信する方法を紹介します。POSTで送信するサンプルコードは以下です。

//配列を作成
$alphabet_array = ['a'=>'alphabet1',
'b'=>'alphabet2',
'c'=>'alphabet3',
'd'=>'alphabet4',
'e'=>'alphabet5'
];

//配列をJSON形式に変換
$jsonstr = json_encode($alphabet_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);

以上のように、PHPではJSONの読み込み、出力、送信が可能です。

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する