PHP で JSON からデータを抽出する方法

Minahil Noor 2021年3月5日
PHP で JSON からデータを抽出する方法

この記事では、PHP で JSON からデータを抽出する方法を紹介します。

  • json_decode() 関数を使用する

PHP で JSON からデータを抽出するには json_decode() 関数を使用する

JSON からデータを抽出するには、組み込み関数 json_decode() を利用します。JSON の文字列をオブジェクトや配列に変換してデータを抽出します。この関数を利用するための正しい構文は以下の通りです。

json_decode($jsonString, $assoc, $depth, $options);

組み込みの関数 json_decode() は 4つのパラメータを持ちます。パラメータの詳細は以下の通りです。

パラメータ 説明
$jsonString 必須 これはデータを抽出したい JSON エンコードされた文字列です。
$assoc オプション これは Boolean 変数です。これが TRUE の場合、この関数は連想配列を返します。FALSE の場合はオブジェクトを返します。
$depth オプション 整数です。指定した深さを指定します。
$options オプション JSON_BIGINT_AS_STRINGJSON_INVALID_UTF8_IGNOREJSON_INVALID_UTF8_SUBSTITUTEJSON_OBJECT_AS_ARRAYJSON_THROW_ON_ERROR のビットマスクを指定しています。詳細はこちらで確認できます。

この関数は、JSON 文字列が適切な形式でない場合に NULL を返します。パラメータ $assoc に応じて連想配列かオブジェクトを返します。

以下のプログラムは、JSON 文字列からデータを抽出するために json_decode() 関数を利用する方法を示しています。

<?php 
$jsonString ='{
    "firstName":"Olivia",
    "lastName":"Mason",
    "dateOfBirth":
    {
        "year":"1999",
        "month":"06",
        "day":"19"
    }
}';
$data = json_decode($jsonString);
echo("The data is: \n");
var_dump($data);
?> 
    

パラメータ $assoc を渡していないので、この関数はオブジェクトを返します。

出力:

The data is: 
object(stdClass)#1 (3) {
  ["firstName"]=>
  string(6) "Olivia"
  ["lastName"]=>
  string(5) "Mason"
  ["dateOfBirth"]=>
  object(stdClass)#2 (3) {
    ["year"]=>
    string(4) "1999"
    ["month"]=>
    string(2) "06"
    ["day"]=>
    string(2) "19"
  }
}

パラメータ $assoc を渡すと、この関数は連想配列を返します。

<?php 
$jsonString ='{
    "firstName":"Olivia",
    "lastName":"Mason",
    "dateOfBirth":
    {
        "year":"1999",
        "month":"06",
        "day":"19"
    }
}';
$data = json_decode($jsonString, true);
echo("The data is: \n");
var_dump($data);
?> 

出力:

The data is: 
array(3) {
  ["firstName"]=>
  string(6) "Olivia"
  ["lastName"]=>
  string(5) "Mason"
  ["dateOfBirth"]=>
  array(3) {
    ["year"]=>
    string(4) "1999"
    ["month"]=>
    string(2) "06"
    ["day"]=>
    string(2) "19"
  }
}

関数がオブジェクトを返した場合は、次のようにしてデータにアクセスできます。

<?php 
$jsonString ='{
    "firstName":"Olivia",
    "lastName":"Mason",
    "dateOfBirth":
    {
        "year":"1999",
        "month":"06",
        "day":"19"
    }
}';
$data = json_decode($jsonString);
echo("The first name is: \n");
echo $data->firstName;
?> 

この関数は、抽出されたデータから名を返します。

出力:

The first name is: 
Olivia

この関数が配列を返した場合、次のようにして直接データにアクセスすることができます。

<?php 
$jsonString ='{
    "firstName":"Olivia",
    "lastName":"Mason",
    "dateOfBirth":
    {
        "year":"1999",
        "month":"06",
        "day":"19"
    }
}';
$data = json_decode($jsonString, true);
echo("The first name is: \n");
echo $data['firstName'];
?> 

この関数は、抽出されたデータから名を返します。

出力:

The first name is: 
Olivia

配列を繰り返し処理することもできます。

<?php 
$jsonString ='{
    "firstName":"Olivia",
    "lastName":"Mason",
    "dateOfBirth": "19-09-1999"
}';
$data = json_decode($jsonString, true);
foreach ($data as $key=> $data1) {
    echo $key, " : ";
    echo $data1, "\n";
}
?> 

この関数は抽出されたデータを返します。

出力:

firstName : Olivia
lastName : Mason
dateOfBirth : 19-09-1999

関連記事 - PHP JSON