JSON PHP

JSONの一般的な用途は、ウェブサーバーからデータを読み取り、それをウェブページで表示することです。

この章では、クライアントとPHPサーバー間でJSONデータを交換する方法について説明します。

PHP ファイル

PHPはJSONを処理する内蔵関数を提供します。

PHP関数を使用して json_encode()、PHPにおけるオブジェクトはJSONに変換できます:

PHP ファイル

<?php
$myObj->name = "Bill Gates";
$myObj->age = 62;
$myObj->city = "Seattle";
$myJSON = json_encode($myObj);
echo $myJSON;
?>

PHPファイルを表示します

クライアント側JavaScript

これはクライアント側のJavaScriptで、AJPX呼び出しを使用して上記のPHPファイルをリクエストするものです:

使用 JSON.parse() 結果をJavaScriptオブジェクトに変換します:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
         myObj = JSON.parse(this.responseText);
         document.getElementById("demo").innerHTML = myObj.name;
     });
});
xmlhttp.open("GET", "demo_file.php", true);
xmlhttp.send();

自分で試してみてください

PHP配列

PHP関数を使用する際に、 json_encode() の場合、PHPの配列もJSONに変換されます:

PHP ファイル

<?php
$myArr = array("Bill Gates", "Steve Jobs", "Elon Musk");
$myJSON = json_encode($myArr);
echo $myJSON;
?>

PHPファイルを表示します

クライアント側JavaScript

これはクライアント側のJavaScriptで、AJPX呼び出しを使用して上記のPHPファイルをリクエストするものです:

使用してください JSON.parse() 結果をJavaScript配列に変換します:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
         myObj = JSON.parse(this.responseText);
         document.getElementById("demo").innerHTML = myObj[2];
     });
});
xmlhttp.open("GET", "demo_file_array.php", true);
xmlhttp.send();

自分で試してみてください

PHPデータベース

PHPはサーバーサイドのプログラミング言語であり、データベースへのアクセスなどのサーバー側でのみ実行される操作に使用されるべきです。

サーバー上に、顧客、製品、サプライヤーのデータを含むデータベースがあると想像してみてください。

この時点で、あなたは「顧客」テーブルの前10件のレコードを取得するためにサーバーをリクエストする必要があります:

使用してください JSON.stringify() JavaScriptオブジェクトをJSONに変換します:

obj = { "table":"customers", "limit":10 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
     if (this.readyState == 4 && this.status == 200) {
        document.getElementById("demo").innerHTML = this.responseText;
    });
});
xmlhttp.open("GET", "demo_json_db.php?x=" + dbParam, true);
xmlhttp.send();

自分で試してみてください

例説明:

  • table属性とlimit属性を含むオブジェクトを定義します。
  • このオブジェクトをJSON文字列に変換します。
  • JSONとしてパラメータを含むこのPHPファイルにリクエストを送信します。
  • リクエストが返信されるまで待ちます(JSONとして)。
  • PHPファイルから受け取った結果を表示します。

PHPファイルを確認してください。

PHP ファイル

<?php
header("Content-Type: application/json; charset=UTF-8");
$obj =  json_decode($_GET["x"], false);
$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit);
$outp = array();
$outp = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($outp);
?>

PHPファイルの説明:

  • PHP関数を使用してリクエストをオブジェクトに変換します。 json_decode().
  • データベースにアクセスし、リクエストされたデータで配列を埋めます。
  • 配列をオブジェクトに追加するために、 json_encode() オブジェクトをJSONで返します。

結果を巡回します

PHPファイルから受け取った結果をJavaScriptオブジェクトに変換します、またはこの例ではJavaScript配列:

使用 JSON.parse() JSONをJavaScriptオブジェクトに変換します:

...
xmlhttp.onreadystatechange = function() {
     if (this.readyState == 4 && this.status == 200) {
         myObj = JSON.parse(this.responseText);
         for (x in myObj) {
             txt += myObj[x].name + "<br>";
        });
         document.getElementById("demo").innerHTML = txt;
    });
});
 ...

自分で試してみてください

PHPメソッド = POST

データをサーバーに送信する際には、HTTP POSTメソッドが一般的に最適です。

POSTメソッドを使用してAJAXリクエストを送信する場合、そのメソッドと正しいヘッダーを指定してください。

サーバーにデータを送信する際には、通常HTTP POSTメソッドを使用するのが良いです。 .send(); 方法の引数:

obj = { "table":"customers", "limit":10 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
     if (this.readyState == 4 && this.status == 200) {
         myObj = JSON.parse(this.responseText);
         for (x in myObj) {
             txt += myObj[x].name + "<br>";
        });
         document.getElementById("demo").innerHTML = txt;
    });
});
xmlhttp.open("POST", "demo_json_db.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam);

自分で試してみてください

PHP ファイルでの唯一の違いは、送信されたデータを取得する方法です。

PHP ファイル

使用 $_POST ではなく $_GET

<?php
header("Content-Type: application/json; charset=UTF-8");
$obj =  json_decode($_POST["x"], false);
$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit);
$outp = array();
$outp = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($outp);
?>