JSON PHP
JSONの一般的な使用法は、Webサーバーからデータを読み取り、そのデータをWebページに表示することです。
この章では、クライアントとPHPサーバー間でJSONデータを交換する方法について説明します。
PHPファイル
PHPには、JSONを処理するための組み込み関数がいくつかあります。
PHPのオブジェクトは、PHP関数 json_encode()を使用してJSONに変換できます。
PHPファイル
<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New
York";
$myJSON = json_encode($myObj);
echo $myJSON;
?>
クライアントJavaScript
これは、AJAX呼び出しを使用して上記の例からPHPファイルを要求するクライアント上のJavaScriptです。
例
JSON.parse()を使用して、結果をJavaScriptオブジェクトに変換します。
const xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj.name;
}
xmlhttp.open("GET", "demo_file.php");
xmlhttp.send();
PHP配列
PHP関数 json_encode()を使用すると、PHPの配列もJSONに変換されます。
PHPファイル
<?php
$myArr = array("John", "Mary", "Peter", "Sally");
$myJSON = json_encode($myArr);
echo $myJSON;
?>
クライアントJavaScript
これは、クライアントのJavaScriptで、AJAX呼び出しを使用して、上記の配列の例からPHPファイルを要求します。
例
JSON.parse()を使用して、結果をJavaScript配列に変換します。
var xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj[2];
}
xmlhttp.open("GET", "demo_file_array.php", true);
xmlhttp.send();
PHPデータベース
PHPはサーバー側のプログラミング言語であり、データベースへのアクセスに使用できます。
サーバーにデータベースがあり、クライアントからデータベースにリクエストを送信して、「customers」というテーブルの最初の10行を要求するとします。
クライアントで、返したい行数を記述したJSONオブジェクトを作成します。
サーバーにリクエストを送信する前に、JSONオブジェクトを文字列に変換し、パラメーターとしてPHPページのURLに送信します。
例
JSON.stringify()を使用して、JavaScriptオブジェクトをJSONに変換します。
const limit = {"limit":10};
const dbParam = JSON.stringify(limit);
xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
document.getElementById("demo").innerHTML = this.responseText;
}
xmlhttp.open("GET","json_demo_db.php?x=" + dbParam);
xmlhttp.send();
説明された例:
- 「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");
$stmt = $conn->prepare("SELECT name FROM customers LIMIT ?");
$stmt->bind_param("s", $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($outp);
?>
PHPファイルの説明:
- PHP関数json_decode()を使用して、リクエストをオブジェクトに変換します 。
- データベースにアクセスし、要求されたデータを配列に入力します。
- 配列をオブジェクトに追加し、 json_encode()関数を使用してオブジェクトをJSONとして返します。
データを使用する
例
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
let text = "";
for (let x in myObj) {
text += myObj[x].name + "<br>";
}
document.getElementById("demo").innerHTML = text;
}
PHPメソッド= POST
サーバーにデータを送信するときは、多くの場合、HTTPPOST
メソッドを使用するのが最適です。
メソッドを使用してAJAXリクエストを送信POST
するには、メソッドと正しいヘッダーを指定します。
send()
サーバーに送信されるデータは、メソッドの引数である必要があります。
例
const dbParam = JSON.stringify({"limit":10});
const xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
const myObj = JSON.parse(this.responseText);
let text ="";
for (let x in myObj) {
text += myObj[x].name + "<br>";
}
document.getElementById("demo").innerHTML = text;
}
xmlhttp.open("POST", "json_demo_db_post.php");
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam);
PHPファイルの唯一の違いは、転送されたデータを取得する方法です。
PHPファイル
$ _GETの代わりに$ _POSTを使用します。
<?php
header("Content-Type: application/json; charset=UTF-8");
$obj =
json_decode($_POST["x"], false);
$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$stmt = $conn->prepare("SELECT name FROM customers LIMIT ?");
$stmt->bind_param("s",
$obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($outp);
?>