Hướng dẫn json to php

Chuyển array thành json string

Array thành json string

$user = [
    'id' => 1,
    'username' => 'admin',
];

echo json_encode($user);

Kết quả:

{"id":1,"username":"admin"}

Nếu muốn format đẹp hơn ta cho thêm tham số:

echo json_encode($user, JSON_PRETTY_PRINT);

Kết quả:

{
    "id": 1,
    "username": "admin"
}

Chuyển ngược lại json string thành array

Cách thực hiện đơn giản như sau:

$json = '{"id":1,"username":"admin"}';
$user = json_decode($json, true);

Tham số thứ 2 true của hàm json_decode là để hàm trả về kết quả là array.

Chuyển Object thành json string

Encode

Ta giả sử có class user như sau:

class User {
    public $id;
    public $username;
}

Sử dụng class như sau:

$user = new User();
$user->id = 1;
$user->username = 'admin';

echo json_encode($user);

Ta cũng sẽ được kết quả tương tự như trên:

`{"id":1,"username":"admin"}

Decode

Vậy làm sao để decode được json to object của class User Có khá nhiều cách nhưng cách đơn giản và hiệu quả nhất như sau:

// Khai báo class
class User {
    public $id;
    public $username;
}

// json string
$json = '{"id":1,"username":"admin"}';

// thực hiện decode như ở trên
$data = json_decode($json, true);

// tạo object User
$user = new User();

// Gắn dữ liệu vào object User
foreach ($data as $key => $value) {
    $user->{$key} = $value;
}

// Thu được kết quả
var_export($user);

Kết quả:

User::__set_state(array(
   'id' => 1,
   'username' => 'admin',
))

---

Phuc Tran Hoang

Cách sử dụng phổ biến của JSON là đọc dữ liệu từ máy chủ web và hiển thị dữ liệu trong một trang web.

Bài viết này sẽ hướng dẫn bạn cách trao đổi dữ liệu JSON giữa máy khách và máy chủ PHP.

Tệp PHP

PHP có một số hàm tích hợp để xử lý JSON.

Các đối tượng trong PHP có thể được chuyển đổi thành JSON bằng cách sử dụng hàm PHP json_encode().

Ví dụ ta có file tên demo_file.php:


$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";

$myJSON = json_encode($myObj);

echo $myJSON;
?>

JavaScript máy khách

Đây là một JavaScript trên máy khách, sử dụng lệnh gọi AJAX để yêu cầu tệp PHP từ ví dụ trên:

html>
<html>
<body>

<h2>Get data as JSON from a PHP file on the server.h2>

<p id="demo">p>

<script>
  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();
script>

body>
html>

Mảng PHP

Mảng trong PHP cũng sẽ được chuyển đổi thành JSON khi sử dụng hàm PHP json_encode().

Ví dụ ta có file tên demo_file_array.php:


$myArr = array("John""Mary""Peter""Sally");

$myJSON = json_encode($myArr);

echo $myJSON;
?>

JavaScript máy khách

Đây là một JavaScript trên máy khách, sử dụng lệnh gọi AJAX để yêu cầu tệp PHP từ ví dụ mảng ở trên:

html>
<html>
<body>

<h2>Get data as JSON from a PHP file, and convert it into a JavaScript array.h2>

<p id="demo">p>

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

body>
html>

Cơ sở dữ liệu PHP

PHP là ngôn ngữ lập trình phía máy chủ và có thể được sử dụng để truy cập cơ sở dữ liệu.

Hãy tưởng tượng bạn có một cơ sở dữ liệu trên máy chủ của mình và bạn muốn gửi một yêu cầu đến nó từ máy khách, trong đó bạn yêu cầu 10 hàng đầu tiên trong bảng có tên "customer".

Trên máy khách, ta tạo một đối tượng JSON mô tả số hàng bạn muốn trả về.

Trước khi bạn gửi yêu cầu đến máy chủ, hãy chuyển đổi đối tượng JSON thành một chuỗi và gửi nó dưới dạng một tham số đến url của trang PHP:

html>
<html>
<body>

<h2>Get data as JSON from a PHP file on the server.h2>

<p>The JSON received from the PHP file:p>

<p id="demo">p>

<script>
  var obj, dbParam, xmlhttp;
  obj = { "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", "json_demo_db.php?x=" + dbParam, true);
  xmlhttp.send();
script>

body>
html>

Ví dụ được giải thích như sau:

  • Xác định một đối tượng chứa thuộc tính và giá trị "limit".
  • Chuyển đổi đối tượng thành một chuỗi JSON.
  • Gửi một yêu cầu đến tệp PHP, với chuỗi JSON làm tham số.
  • Chờ cho đến khi yêu cầu trả về kết quả (dưới dạng JSON)
  • Hiển thị kết quả nhận được từ tệp PHP.

Còn đây là nội dung tệp json_demo_db.php:


header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);

$conn = new mysqli("myServer""myUser""myPassword""myDB");
$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);
?>

Tệp PHP được giải thích như sau:

  • Chuyển đổi yêu cầu thành một đối tượng bằng cách sử dụng hàm PHP json_decode().
  • Truy cập cơ sở dữ liệu và điền vào một mảng với dữ liệu được yêu cầu.
  • Thêm mảng vào một đối tượng và trả về đối tượng dưới dạng JSON bằng cách sử dụng hàm json_encode().

Lặp lại kết quả

Chuyển đổi kết quả nhận được từ tệp PHP thành một đối tượng JavaScript hoặc trong trường hợp này là một mảng JavaScript:

html>
<html>
<body>

<h2>Get data as JSON from a PHP file on the server.h2>

<p id="demo">p>

<script>
  var obj, dbParam, xmlhttp, myObj, x, txt = "";
  obj = { "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 + "
"; } document.getElementById("demo").innerHTML = txt; } }; xmlhttp.open("GET", "json_demo_db.php?x=" + dbParam, true); xmlhttp.send(); script> <p>Try changing the "limit" property from 10 to 5.p> body> html>

PHP METHOD = POST

Khi gửi dữ liệu đến máy chủ, cách tốt nhất là sử dụng cách thức gửi là POST.

Để gửi yêu cầu AJAX bằng cách thức POST, hãy chỉ định phương thức và tiêu đề chính xác.

Dữ liệu được gửi đến máy chủ bây giờ phải là một đối số cho phương thức send():

html>
<html>
<body>

<h2>Use the HTTP method POST to send data to the PHP file.h2>

<p id="demo">p>

<script>
  var obj, dbParam, xmlhttp, myObj, x, txt = "";
  obj = { "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 + "
"; } document.getElementById("demo").innerHTML = txt; } }; xmlhttp.open("POST", "json_demo_db_post.php", true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send("x=" + dbParam); script> <p>Try changing the "limit" property from 10 to 5.p> body> html>

Sự khác biệt duy nhất trong tệp PHP là phương thức lấy dữ liệu được truyền.

Ở file json_demo_db_post.php ta sử dụng $_POST thay vì $_GET:


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);
?>