Maison >développement back-end >tutoriel php >Comment détecter de manière fiable les données JSON mal formées en PHP à l'aide de « json_decode() » ?

Comment détecter de manière fiable les données JSON mal formées en PHP à l'aide de « json_decode() » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-19 14:05:02239parcourir

How to Reliably Detect Malformed JSON Data in PHP Using `json_decode()`?

Comment détecter des données JSON mal formées à l'aide du décodage JSON en PHP

Lors de la tentative d'analyse de données JSON à l'aide de json_decode(), la gestion des formats non valides est crucial pour garantir l’intégrité des données. Bien que cette fonction soit généralement efficace, elle peut présenter des incohérences lors de la gestion de certains types d'entrée.

Scénario de problème

Considérez le scénario suivant :

if(!json_decode($_POST)) {
  echo "bad json data!";
  exit;
}

Ce script vise à détecter et gérer les données JSON invalides. Cependant, lorsque $_POST contient un format JSON valide (par exemple, { bar: "baz" }), json_decode() gère correctement l'erreur, affichant "mauvaises données json !". Cependant, lorsque $_POST est défini sur un format non valide (par exemple, « données non valides »), un avertissement inattendu est généré, suivi de « données json incorrectes ! » :

Warning: json_decode() expects parameter 1 to be string, array given in ...
bad json data!

Détection personnalisée ou Solution alternative ?

Pour résoudre ce problème, les développeurs peuvent envisager d'écrire un script personnalisé pour détecter les données JSON valides ou explorer d'autres scripts disponibles. options.

Solution utilisant les fonctionnalités de décodage JSON :

Le décodage JSON présente plusieurs caractéristiques clés à prendre en compte :

  • Il renvoie les données analysées ou null en cas d'erreur.
  • Il peut également renvoyer null pour un cas valide où la chaîne JSON contient null.
  • Il génère des avertissements pour certaines erreurs.

Pour éviter le problème d'avertissement, l'opérateur @ peut être utilisé (bien que son utilisation soit déconseillée en raison de difficultés potentielles de débogage). Cet opérateur supprime l'avertissement tout en permettant au script de poursuivre son exécution.

$_POST = array('bad data');
$data = @json_decode($_POST);

Après avoir supprimé l'avertissement, il est nécessaire de vérifier si $data est nul. Pour faire la différence entre un format invalide et une valeur nulle valide, json_last_error() peut être utilisé. Cette fonction renvoie l'erreur d'analyse JSON la plus récente, le cas échéant.

if ($data === null && json_last_error() !== JSON_ERROR_NONE) {
    echo "incorrect data";
}

En combinant ces techniques, nous pouvons détecter et gérer efficacement les données JSON invalides en PHP à l'aide de json_decode().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn