首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 返回 JSON 數據函數實例:json_encode 從入門到中文處理最佳實踐

     編輯:PHP 相關知識

PHP 輸出 JSON 完整實戰指南

本文匯總 json_encode 核心用法、資料庫結果集轉換、中文 Unicode 處理、自定義遞歸編碼、錯誤碼規範等生產級技巧。

基礎輸出

echo json_encode(['a' => 'bbbb', 'c' => 'ddddd']);
// {"a":"bbbb","c":"ddddd"}

資料庫結果集轉 JSON(PDO)

$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'user', 'pass');
$stmt = $pdo->query('SELECT id, name FROM users LIMIT 10');
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo json_encode([
    'code' => 0,
    'msg' => 'success',
    'data' => ['list' => $rows]
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

複雜巢狀結構範例

$respon = [
    'UserKeyGetResponse' => [
        'RequestName' => $api_request_name,
        'api_key_value' => $api_key_value,
    ],
    'error_response' => [
        'code' => 'NO_ERROR',
        'msg' => '獲取系統參數成功',
    ],
];
echo json_encode($respon, JSON_UNESCAPED_UNICODE);

自定義遞歸編碼:統一清洗/脫敏

function jsonEncodeDeep(mixed $data, int $flags = 0): string|false {
    array_walk_recursive($data, function (&$value, $key) {
        if (is_string($value)) {
            $value = trim($value);
            // 手機號脫敏
            if (in_array($key, ['phone', 'mobile', 'tel'])) {
                $value = preg_replace('/^(\d{3})\d{4}(\d{4})$/', '$1****$2', $value);
            }
        }
    });
    return json_encode($data, $flags);
}

前端解析(jQuery / Fetch)

// jQuery
$.getJSON('/api/users', res => {
    if (res.code === 0) {
        $.each(res.data.list, (i, user) => console.log(user.name));
    }
});

// Fetch
const res = await fetch('/api/users');
const { code, data } = await res.json();

常見問題速查

問題解決
中文變 \uXXXX加 JSON_UNESCAPED_UNICODE (PHP 5.4+)
返回 false檢查非 UTF-8 字元,用 mb_check_encoding 清洗
大整數精度丟失避免 JSON_NUMERIC_CHECK,大整數以字串輸出
循環引用實作 JsonSerializable 控制輸出
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved