| 函數 | 用途 | 關鍵參數 |
|---|---|---|
json_encode() | PHP 變量 → JSON 字符串 | JSON_UNESCAPED_UNICODE 保留中文,JSON_PRETTY_PRINT 格式化 |
json_decode() | JSON 字符串 → PHP 變量 | true 返回關聯數組,false 返回對象 |
json_last_error() | 獲取最後錯誤碼 | 配合 json_last_error_msg() 調試 |
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);
(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
)
...
)
$obj = json_decode($json); // 對象 $arr = json_decode($json, true); // 關聯數組(推薦)
PHP `json_decode` 預設將大整數轉為浮點數,導致精度丟失(如訂單號、身份證號)。
// 解決:使用 JSON_BIGINT_AS_STRING (PHP 7.3+) $data = json_decode($json, true, 512, JSON_BIGINT_AS_STRING); // 或預處理:正則將數字加引號
文件保存為 UTF-8 with BOM 時,首字符為 \ufeff,需預先清理:
$jsonStr = ltrim($jsonStr, "\xEF\xBB\xBF");
// 清理不可見控制字符
$jsonStr = preg_replace('/[\x00-\x1F\x7F]/', '', $jsonStr);
JsonMachine 或 halaxa/json-machine 流式讀取,避免全量載入內存json_decode 結果json_encode($de_json[$i]['sale_price']) 是錯誤的雙重編碼,直接取值即可PHP 處理 JSON 核心就兩個函數,關鍵在於:始終用 `true` 獲取數組、處理大數字精度、清理異常字符、做好錯誤檢查。掌握這些細節,即可構建健壯的 JSON 數據交換層。