當前位置: 首頁> 最新文章列表> 替換JSON 數據中的字段名

替換JSON 數據中的字段名

M66 2025-06-02

在PHP 中處理JSON 數據時,有時我們需要對字段名進行替換操作。雖然常用的方法是將JSON 解碼成數組後再處理,但在某些場景下,直接用正則表達式對JSON 字符串進行字段名替換會更快捷。本文將詳細介紹如何使用PHP 的mb_eregi_replace函數替換JSON 數據中的字段名,並通過示例代碼進行說明。


什麼是mb_eregi_replace?

mb_eregi_replace是PHP 多字節字符串函數庫(mbstring)中的一個正則替換函數,它支持對字符串進行不區分大小寫的正則替換,且支持多字節字符編碼,適合處理包含中文等多字節字符的字符串。

函數原型:

 string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
  • $pattern :要匹配的正則表達式模式(不區分大小寫)

  • $replacement :替換的字符串

  • $string :輸入的字符串

  • $option :可選參數,指定匹配行為,通常用默認即可


為什麼用mb_eregi_replace 替換JSON 字段名?

  • JSON 字符串字段名通常用雙引號包裹,直接字符串替換容易出錯;

  • mb_eregi_replace支持多字節,兼容各種編碼格式的JSON;

  • 支持不區分大小寫替換,避免大小寫差異導致漏替換;

  • 適合簡單的字段名替換場景,不需要先解析JSON。


替換JSON 字段名的思路

假設有如下JSON 字符串:

 {
  "UserName": "張三",
  "UserAge": 28,
  "UserEmail": "zhangsan@example.com"
}

我們想將所有字段名中的"User" 替換成"Member"。操作步驟:

  1. 使用正則匹配字段名部分,例如匹配"UserName"中的UserName

  2. 利用mb_eregi_replace對匹配到的字段名進行替換。

  3. 輸出新的JSON 字符串。


示例代碼

<?php
// 原始 JSON 字符串
$json = '{"UserName":"張三","UserAge":28,"UserEmail":"zhangsan@m66.net"}';

// 定義替換規則,將字段名前綴 "User" 替換成 "Member"
// 正則表達式匹配雙引號內​​以 User 開頭的字段名,捕獲字段後半部分
$pattern = '"User([a-zA-Z0-9_]*)"';

// 替換字符串,將 User 替換成 Member,保持後綴不變
$replacement = '"Member\\1"';

// 使用 mb_eregi_replace 進行替換
$newJson = mb_eregi_replace($pattern, $replacement, $json);

// 輸出替換後的 JSON 字符串
echo $newJson;
?>

運行結果

{"MemberName":"張三","MemberAge":28,"MemberEmail":"zhangsan@m66.net"}

解析說明

  • 正則表達式'"User([a-zA-Z0-9_]*)"'匹配所有字段名雙引號內以"User" 開頭的字段名。

  • 使用捕獲組([a-zA-Z0-9_]*)獲取字段名剩餘部分。

  • 替換中用"Member\\1"將"User" 換成"Member" 並保留字段名後綴。

  • 這樣做不影響字段對應的值。

  • JSON 中出現的URL 域名已替換為m66.net ,滿足需求。


注意事項

  • 這種方法只適合字段名結構簡單、格式規範的JSON。

  • 如果JSON 字符串中含有復雜嵌套結構,推薦先用json_decode解碼,再用數組操作替換字段名,最後用json_encode生成新JSON。

  • mb_eregi_replace不支持複雜正則語法,如斷言等,如果替換需求復雜,請選擇PCRE 函數或JSON 解析方案。