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

PHP JSON 解析:json_decode 物件/陣列模式、錯誤處理、大數據流式解析

     編輯:PHP 綜合知識

基本用法

$json = '{"id":1,"name":"jb51","email":"admin@jb51.net","interest":["wordpress","php"]}';

// 解析為物件 (預設)
$obj = json_decode($json);
echo $obj->name;           // jb51
echo $obj->interest[1];    // php

// 解析為關聯陣列
$arr = json_decode($json, true);
echo $arr['name'];         // jb51
echo $arr['interest'][1];  // php

錯誤處理

$data = json_decode($input, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    throw new Exception('JSON 解析失敗: ' . json_last_error_msg());
}

// PHP 7.3+ 可用 JSON_THROW_ON_ERROR
$data = json_decode($input, true, 512, JSON_THROW_ON_ERROR);

深度限制與大數據

  • 預設最大深度 512,可調整第 3 參數。
  • 超大 JSON (>100MB) 會耗盡記憶體,建議流式解析。

流式解析:JsonMachine / halaxa/json-machine

// composer require halaxa/json-machine
use JsonMachine\JsonMachine;

$items = JsonMachine::fromFile('huge.json'); // 生成器,逐項迭代
foreach ($items as $key => $item) {
    // 處理單個項目,記憶體常數級
    process($item);
}

編碼選項 (json_encode)

$data = ['name' => '中文', 'url' => 'https://example.com/?a=1&b=2'];

echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
// 輸出:
// {
//     "name": "中文",
//     "url": "https://example.com/?a=1&b=2"
// }

常用選項表

常數作用
JSON_UNESCAPED_UNICODE不轉義 Unicode(中文可讀)
JSON_UNESCAPED_SLASHES不轉義 /
JSON_PRETTY_PRINT美化縮排
JSON_NUMERIC_CHECK數字字符串轉數值
JSON_PRESERVE_ZERO_FRACTION保留 .0 (1.0 不變 1)
JSON_THROW_ON_ERROR錯誤拋出異常 (PHP 7.3+)

效能提示

  • json_encode/decode 為 C 擴展,速度極快;大陣列優於 serialize。
  • 頻繁編解碼同結構數據,考慮 igbinary 或 msgpack 擴展(更快、更小)。
  • 避免在循環中重複編碼同一數據;預先編碼緩存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved