Lors du traitement des données JSON en PHP, nous devons parfois remplacer le nom du champ. Bien que la méthode couramment utilisée soit de décoder JSON dans un tableau puis de le traiter, dans certains scénarios, il est plus rapide de remplacer le nom de champ de la chaîne JSON directement par des expressions régulières. Cet article expliquera en détail comment remplacer les noms de champ dans les données JSON à l'aide de la fonction MB_EREGI_REPLACE de PHP et l'expliquez par un exemple de code.
MB_EREGI_REPLACE est une fonction de remplacement régulière dans la bibliothèque de fonctions de chaîne PHP multi-byte (MBSTring). Il prend en charge le remplacement régulier insensible à la casse des chaînes et prend en charge le codage des caractères multi-octets, ce qui convient au traitement des chaînes contenant des caractères multi-octets tels que le chinois.
Prototype de fonction:
string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
$ motif : le modèle d'expression régulière à correspondre (cas insensible)
$ Remplacement : chaîne remplacée
$ String : la chaîne entrée
Option $ : paramètre facultatif, spécifiez le comportement de correspondance, généralement en utilisant par défaut
Les noms de champs de chaîne JSON sont généralement enveloppés de citations doubles, et il est facile de faire des erreurs lors du remplacement des chaînes directes;
MB_EREGI_REPLACE prend en charge les multi-octets et est compatible avec JSON dans divers formats de codage;
Soutenir le remplacement insensible au cas pour éviter les différences de cas qui conduisent à un remplacement manqué;
Convient pour les scénarios de remplacement de nom de champ simple, pas besoin d'analyser JSON en premier.
Supposons qu'il y ait la chaîne JSON suivante:
{
"UserName": "Zhang San",
"UserAge": 28,
"UserEmail": "zhangsan@example.com"
}
Nous voulons remplacer "l'utilisateur" dans tous les noms de champ par "membre". Étapes de fonctionnement:
Utilisez la pièce de nom de champ correspondant régulier, par exemple pour correspondre au nom d'utilisateur dans "Nom d'utilisateur" .
Utilisez MB_EREGI_REPLACE pour remplacer le nom du champ correspondant.
Sortez une nouvelle chaîne JSON.
<?php
// original JSON Chaîne
$json = '{"UserName":"Zhang San","UserAge":28,"UserEmail":"zhangsan@m66.net"}';
// Définir les règles de remplacement,Préfixe le nom du champ "User" Remplacer par "Member"
// L'expression régulière correspond aux doubles citations avec User Le nom du champ au début,Capturer la seconde moitié du champ
$pattern = '"User([a-zA-Z0-9_]*)"';
// 替换Chaîne,Volonté User Remplacer par Member,Gardez le suffixe inchangé
$replacement = '"Member\\1"';
// utiliser mb_eregi_replace Faire un remplacement
$newJson = mb_eregi_replace($pattern, $replacement, $json);
// La sortie est remplacée JSON Chaîne
echo $newJson;
?>
{"MemberName":"Zhang San","MemberAge":28,"MemberEmail":"zhangsan@m66.net"}
Expression régulière '"User ([A-ZA-Z0-9 _] *)"' correspond à tous les noms de champ qui commencent par "utilisateur" en doubles guillemets.
Utilisez le groupe de capture ([A-ZA-Z0-9 _] *) pour obtenir le reste du nom du champ.
Utilisez "Member \\ 1" pour remplacer "l'utilisateur" par "membre" et conserver le suffixe de nom de champ.
Cela n'affecte pas la valeur correspondante du champ.
Le nom de domaine URL qui apparaît dans JSON a été remplacé par m66.net pour répondre aux besoins.
Cette méthode ne convient que pour JSON avec une structure de nom de champ simple et un format standardisé.
Si la chaîne JSON contient des structures imbriquées complexes, il est recommandé de décoder d'abord avec JSON_DECODE , alors remplacez le nom de champ par des opérations de tableau, et enfin générer un nouveau JSON par JSON_ENCODODE .
MB_EREGI_REPLACE ne prend pas en charge la syntaxe régulière complexe telle que les assertions. Si les exigences de remplacement sont complexes, veuillez sélectionner la fonction PCRE ou le schéma de résolution JSON.