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

PHP 解析 JSON 數據實戰:json_decode 使用技巧與常見錯誤避坑

     編輯:PHP 相關知識

PHP 解析 JSON 數據實戰:json_decode 使用技巧與常見錯誤避坑

JSON 是現代 Web API 標準數據格式,PHP 通過 json_decode() 解析。本文通過實例演示正確用法、參數含義、巢狀結構訪問、以及常見編碼/格式錯誤處理。

一、構造測試 JSON 數據

<?php
$data = "[";
for ($i = 0; $i < 20; $i++) {
    $data .= "{";
    $data .= "\"id\":\"110\",";
    $data .= "\"name\":\"110\",";
    $data .= "\"original_price\":\"110\",";
    $data .= "\"sale_price\":\"110\",";
    $data .= "\"introduce\":\"110\",";
    $data .= "\"content\":\"110\",";
    $data .= "\"nums\":110";
    $data .= "}";
    if ($i < 19) $data .= ",";
}
$data .= "]";
// $data 現在是合法的 JSON 字符串(數組包含 20 個對象)

二、正確解析並提取字段

<?php
$array = array();
$de_json = json_decode($data, true); // true 返回關聯數組
$count = count($de_json);

for ($i = 0; $i < $count; $i++) {
    $array[$i]["id"] = $de_json[$i]['id'];
    $array[$i]["name"] = $de_json[$i]['name'];
    $array[$i]["original_price"] = $de_json[$i]['original_price'];
    // 注意:原代碼此處錯誤用 json_encode,應直接賦值
    $array[$i]["sale_price"] = $de_json[$i]['sale_price'];
}
var_dump($array);

三、巢狀 JSON 解析示例 (來自官方文檔)

<?php
$json_string = '{"status":"Success","request":{"method":"POST","parameters":[{"name":"email","value":"test@test.com"}]},"logon_user":{"guid":108142,"email":"test@test.com"}}';

$obj = json_decode($json_string); // 默認返回對象
echo $obj->logon_user->guid; // 輸出 108142

// 或獲取關聯數組
$arr = json_decode($json_string, true);
echo $arr['logon_user']['guid'];

四、關鍵參數與常見錯誤

參數/情況說明
json_decode($json, true)第二參數 true 強制返回關聯數組,否則返回 stdClass 對象
JSON 語法錯誤尾隨逗號、單引號、未轉義控制字符、BOM 頭會導致解析失敗返回 null
json_last_error()解析失敗時調用獲取錯誤碼,配合 json_last_error_msg() (PHP 5.5+) 獲取描述
大數字精度丟失PHP 整數超出範圍會轉浮點,大整數建議以字符串形式傳輸
深度遞歸限制默認 512 層,可通過 json_decode($json, false, 1024) 第三參數調整 (PHP 7.1+)

五、最佳實踐建議

  1. 解析前先 var_dump(json_last_error()) 確認無錯誤。
  2. API 交互建議統一用 true 參數獲取數組,便於統一處理。
  3. 異常數據記錄原始 JSON 字符串便於排查。
  4. 生成 JSON 使用 json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) 保持中文可讀、避免斜槓轉義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved