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

PHP 解析 JSON 數據實戰:從構建到解碼的完整流程

     編輯:PHP 綜合知識

JSON 在 PHP 中的核心函數

函數用途關鍵參數
json_encode()PHP 變量 → JSON 字符串JSON_UNESCAPED_UNICODE 保留中文,JSON_PRETTY_PRINT 格式化
json_decode()JSON 字符串 → PHP 變量true 返回關聯數組,false 返回對象
json_last_error()獲取最後錯誤碼配合 json_last_error_msg() 調試

完整實戰範例

1. 構建標準 JSON 字符串(模擬 API 響應)

 1000 + $i,
        'name' => "商品 {$i}",
        'original_price' => 199.00,
        'sale_price' => 159.00,
        'introduce' => "這是第 {$i} 個商品的簡介",
        'content' => "詳細內容...",
        'nums' => rand(10, 500)
    ];
}

// 編碼為 JSON(生產環境通常來自 API/數據庫/緩存)
$jsonStr = json_encode($products, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
// 存儲或傳輸...
file_put_contents('products.json', $jsonStr);

2. 解析並轉換為業務數組

 (int)$item['id'],
        'name' => $item['name'],
        'original_price' => (float)$item['original_price'],
        'sale_price' => (float)$item['sale_price'], // 原碼錯誤用 json_encode,此處修正
        'stock' => (int)$item['nums']
    ];
}

// 輸出檢查
echo "解析商品數: " . count($result) . PHP_EOL;
print_r(array_slice($result, 0, 3));

輸出示例

解析商品數: 20
Array
(
    [0] => Array
        (
            [id] => 1001
            [name] => 商品 1
            [original_price] => 199
            [sale_price] => 159
            [stock] => 42
        )
    [1] => Array
        (
            [id] => 1002
            [name] => 商品 2
            [original_price] => 199
            [sale_price] => 159
            [stock] => 187
        )
    ...
)

常見坑位與避坑指南

❌ 坑 1:json_decode 第二參數缺失 → 返回 stdClass 對象

$obj = json_decode($json); // 對象
$arr = json_decode($json, true); // 關聯數組(推薦)

❌ 坑 2:大數字精度丟失

PHP `json_decode` 預設將大整數轉為浮點數,導致精度丟失(如訂單號、身份證號)。

// 解決:使用 JSON_BIGINT_AS_STRING (PHP 7.3+)
$data = json_decode($json, true, 512, JSON_BIGINT_AS_STRING);
// 或預處理:正則將數字加引號

❌ 坑 3:BOM 頭導致解析失敗

文件保存為 UTF-8 with BOM 時,首字符為 \ufeff,需預先清理:

$jsonStr = ltrim($jsonStr, "\xEF\xBB\xBF");

❌ 坑 4:控制字符/非法編碼

// 清理不可見控制字符
$jsonStr = preg_replace('/[\x00-\x1F\x7F]/', '', $jsonStr);

性能優化建議

  • 流式解析:超大 JSON(>100MB)用 JsonMachine 或 halaxa/json-machine 流式讀取,避免全量載入內存
  • 緩存解析結果:相同 JSON 多次解析時,緩存 json_decode 結果
  • 避免重複編碼:原碼中 json_encode($de_json[$i]['sale_price']) 是錯誤的雙重編碼,直接取值即可

總結

PHP 處理 JSON 核心就兩個函數,關鍵在於:始終用 `true` 獲取數組、處理大數字精度、清理異常字符、做好錯誤檢查。掌握這些細節,即可構建健壯的 JSON 數據交換層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved