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

PHP JSON 操作完全指南:json_encode 與 json_decode 進階用法

     編輯:PHP 綜合知識

自 PHP 5.2 起內建 json_encode() 與 json_decode(),本文詳細說明編碼、解碼、陣列與物件轉換、類別序列化、常見錯誤與最佳實踐。

1. json_encode() 基本用法

將陣列或物件轉為 JSON 字串:

$arr = ['a' => 1, 'b' => 2, 'c' => 3];
echo json_encode($arr); // {"a":1,"b":2,"c":3}

$obj->body = 'another post';
$obj->id = 21;
echo json_encode($obj);

重要:輸入必須為 UTF-8 編碼,否則中文會變成 null 或空字串。

2. 索引陣列 vs 關聯陣列

JS 不支援關聯陣列,因此:

  • 索引陣列(連續數字鍵) → JSON 陣列 []
  • 關聯陣列(字串鍵或非連續數字鍵) → JSON 物件 {}
$indexed = ['one', 'two', 'three'];
echo json_encode($indexed); // ["one","two","three"]

$assoc = ['1' => 'one', '2' => 'two'];
echo json_encode($assoc); // {"1":"one","2":"two"}

強制索引陣列輸出為物件:

json_encode((object)$arr);
// 或
json_encode($arr, JSON_FORCE_OBJECT);

3. 類別物件序列化

只有 public 屬性會被編碼,常數、私有/受保護屬性、方法皆會忽略:

class Foo {
    const ERROR_CODE = '404';
    public $public_ex = 'public';
    private $private_ex = 'private';
    protected $protected_ex = 'protected';
}
$foo = new Foo;
echo json_encode($foo); // {"public_ex":"public"}

4. json_decode() 解碼

預設回傳 stdClass 物件,加 true 參數可得關聯陣列:

$json = '{"a":1,"b":2}';
$obj = json_decode($json);
echo $obj->a; // 1

$arr = json_decode($json, true);
echo $arr['a']; // 1

5. 常見 JSON 格式錯誤

以下三種寫法皆會導致 json_decode() 回傳 null:

  • 使用單引號:{ 'bar': 'baz' }
  • 鍵名未加雙引號:{ bar: "baz" }
  • 尾隨逗號:{ "bar": "baz", }

JSON 規範要求:鍵名與字串值必須用雙引號,最後一個值後不可有逗號。

6. 實用選項旗標

旗標說明
JSON_HEX_TAG將 < > 轉為 \u003C \u003E
JSON_HEX_APOS將單引號轉為 \u0027
JSON_HEX_QUOT將雙引號轉為 \u0022
JSON_HEX_AMP將 & 轉為 \u0026
JSON_UNESCAPED_UNICODE不轉義 Unicode 字元(直接輸出中文),PHP 5.4+
JSON_UNESCAPED_SLASHES不轉義正斜線 /
JSON_PRETTY_PRINT美化輸出(縮排換行)
// 範例:輸出可讀且保留中文的 JSON
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved