現在の位置: ホーム> 最新記事一覧> JSONデータのフィールド名を交換します

JSONデータのフィールド名を交換します

M66 2025-06-02

PHPでJSONデータを処理する場合、フィールド名を置き換える必要がある場合があります。一般的に使用される方法は、JSONを配列にデコードしてから処理することですが、いくつかのシナリオでは、JSON文字列のフィールド名を正規表現に直接置き換えることが速いです。この記事では、PHPのMB_EREGI_REPLACE関数を使用してJSONデータのフィールド名を置き換える方法を詳細に説明し、サンプルコードで説明します。


MB_EREGI_REPLACEとは何ですか?

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文字列のフィールド名は通常、二重引用符で包まれており、直接文字列を交換するときに間違いを犯すのは簡単です。

  • MB_EREGI_REPLACEは多バイトをサポートし、さまざまなエンコード形式でJSONと互換性があります。

  • ケースの違いを逃したケースの違いを避けるために、ケースの不感の交換をサポートします。

  • 単純なフィールド名の交換シナリオに適しているため、JSONを最初に解析する必要はありません。


JSONフィールド名を置き換えるためのアイデア

次のJSON文字列があるとします。

 {
  "UserName": "チャン・サン",
  "UserAge": 28,
  "UserEmail": "zhangsan@example.com"
}

すべてのフィールド名の「ユーザー」を「メンバー」に置き換えたいと考えています。操作手順:

  1. たとえば、「ユーザー名」ユーザー名を一致させるために、通常のマッチングフィールド名パーツを使用します。

  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"}

分析手順

  • 正規表現'"ユーザー([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解像度スキームを選択してください。