Dans le développement de PHP, JSON_DECODE est une fonction commune pour l'analyse des données JSON, mais dans une utilisation réelle, vous rencontrez souvent le problème des "caractères JSON illégaux" provoquant une défaillance d'analyse. Cet article vous donnera une compréhension complète de la façon de dépanner et de résoudre les personnages JSON illégaux rencontrés par JSON_DECODE , vous aidant à localiser rapidement les problèmes et à compléter avec succès l'analyse JSON.
JSON_DECODE est utilisé pour convertir les chaînes JSON en variables PHP. Si la chaîne passée est incorrecte, la fonction renvoie NULL et le code d'erreur spécifique peut être obtenu via JSON_LAST_ERROR () .
Les erreurs courantes comprennent:
Caractère illégal : les caractères non reconnus apparaissent dans la chaîne JSON.
Problèmes de codage : JSON doit être un codage UTF-8, le codage non UTF-8 entraînera l'échec de l'analyse.
Erreur structurelle : citations manquantes, virgules, décalage du support, etc.
Lorsque l'analyse échoue, le code d'erreur et la description sont préférés:
<?php
$json = '{"name": "Zhang San", "age": 28,}'; // Notez qu'il y a une virgule supplémentaire à la fin
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'Code d'erreur:' . json_last_error() . PHP_EOL;
echo 'message d'erreur:' . json_last_error_msg() . PHP_EOL;
}
?>
Ce code provoquera une "erreur de grammaire" et vous dira qu'il y a un problème avec la structure JSON.
Lorsque vous rencontrez des chaînes JSON complexes, vous pouvez copier la chaîne sur un outil de vérification JSON en ligne (tel que gitbox.net) pour aider à dépanner les erreurs de syntaxe.
Les chaînes codées non UTF-8 peuvent faire échouer l'analyse. Vous pouvez utiliser des fonctions PHP pour détecter et convertir:
<?php
if (!mb_check_encoding($json, 'UTF-8')) {
$json = mb_convert_encoding($json, 'UTF-8', 'auto');
}
?>
Parfois, la copie et le collage produisent des personnages cachés (comme BOM) peuvent faire échouer l'analyse:
<?php
// Retirer UTF-8 BOM
$json = preg_replace('/^\x{FEFF}/u', '', $json);
?>
Filtrez des caractères non imprimés avec des expressions régulières:
<?php
$json = preg_replace('/[\x00-\x1F\x7F]/u', '', $json);
?>
Si des citations doubles non réessées apparaissent dans JSON Strings, cela entraînera également des erreurs d'analyse:
<?php
$json = str_replace('"', '\"', $json);
?>
Remarque: Cette méthode ne convient que pour des scénarios simples, et le remplacement aveugle n'est pas recommandé pour JSON complexe.
L'analyse JSON_DECODE qui est livrée avec PHP est relativement stricte, vous pouvez donc envisager d'utiliser une bibliothèque d'analyse JSON plus tolérante, telle que:
Ces bibliothèques peuvent vous aider à mieux localiser et tolérer des personnages JSON illégaux.
Assurez-vous toujours que la chaîne JSON est formatée correctement et évitez les erreurs de syntaxe telles que les virgules inutiles et les citations non clôturées.
Confirmez que la chaîne JSON est codée en tant que UTF-8.
Nettoyez des personnages cachés et bom.
Utilisez JSON_LAST_ERROR et JSON_LAST_ERROR_MSG pour aider à positionner les problèmes.
Pour JSON complexe ou irrégulier, essayez d'utiliser un outil de vérification JSON spécial (Gitbox.net recommandé) pour aider à l'inspection.
Utilisez des bibliothèques tierces pour améliorer la robustesse de l'analyse si nécessaire.
Maîtrisez les compétences d'enquête ci-dessus et lorsque vous rencontrez JSON_DECODE Analyse de l'analyse, vous serez à l'aise, localisez rapidement et résolvez le problème!