PHPでJSONデータを処理する場合、フィールド名を置き換える必要がある場合があります。一般的に使用される方法は、JSONを配列にデコードしてから処理することですが、いくつかのシナリオでは、JSON文字列のフィールド名を正規表現に直接置き換えることが速いです。この記事では、PHPのMB_EREGI_REPLACE関数を使用してJSONデータのフィールド名を置き換える方法を詳細に説明し、サンプルコードで説明します。
MB_EREGI_REPLACEは、PHP Multi-Byte String Function Library(MBString)の定期的な交換機能です。これは、ケースに依存しない文字列の定期的な交換をサポートし、中国語などのマルチバイトキャラクターを含む文字列を処理するのに適したマルチバイト文字エンコードをサポートします。
関数プロトタイプ:
string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
$パターン:一致する正規表現パターン(ケース非感受性)
$の交換:交換された文字列
$文字列:入力された文字列
$オプション:オプションのパラメーター、通常はデフォルトを使用して一致する動作を指定します
JSON文字列のフィールド名は通常、二重引用符で包まれており、直接文字列を交換するときに間違いを犯すのは簡単です。
MB_EREGI_REPLACEは多バイトをサポートし、さまざまなエンコード形式でJSONと互換性があります。
ケースの違いを逃したケースの違いを避けるために、ケースの不感の交換をサポートします。
単純なフィールド名の交換シナリオに適しているため、JSONを最初に解析する必要はありません。
次のJSON文字列があるとします。
{
"UserName": "チャン・サン",
"UserAge": 28,
"UserEmail": "zhangsan@example.com"
}
すべてのフィールド名の「ユーザー」を「メンバー」に置き換えたいと考えています。操作手順:
たとえば、「ユーザー名」のユーザー名を一致させるために、通常のマッチングフィールド名パーツを使用します。
MB_EREGI_REPLACEを使用して、一致するフィールド名を置き換えます。
新しい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"}
正規表現'"ユーザー([a-za-z0-9 _]*)"'は、二重引用符で「ユーザー」から始まるすべてのフィールド名と一致します。
キャプチャグループ([a-za-z0-9 _]*)を使用して、残りのフィールド名を取得します。
「メンバー1」を使用して「ユーザー」を「メンバー」に置き換え、フィールド名の接尾辞を保持します。
そうすることは、フィールドの対応する値に影響しません。
JSONに表示されるURLドメイン名は、ニーズを満たすためにM66.NETに置き換えられました。
この方法は、単純なフィールド名構造と標準化された形式を持つJSONにのみ適しています。
JSON文字列に複雑なネストされた構造が含まれている場合は、最初にjson_decodeでデコードし、次にフィールド名を配列操作に置き換え、最後にjson_encodeで新しいJSONを生成することをお勧めします。
MB_EREGI_REPLACEは、アサーションなどの複雑な通常の構文をサポートしていません。交換要件が複雑な場合は、PCRE関数またはJSON解像度スキームを選択してください。