Le format de base de la fonction json_decode est le suivant:
$data = json_decode($jsonString, true);
Le premier paramètre est la chaîne JSON.
Lorsque le deuxième paramètre est vrai , le résultat sera analysé dans un tableau associatif; S'il est omis ou faux , l'objet sera retourné.
Supposons que nous ayons les données JSON multidimensionnelles suivantes:
{
"user": {
"name": "Alice",
"contacts": [
{"type": "email", "value": "[email protected]"},
{"type": "phone", "value": "123456789"}
]
}
}
Code d'analyse:
$json = '{"user":{"name":"Alice","contacts":[{"type":"email","value":"[email protected]"},{"type":"phone","value":"123456789"}]}}';
$data = json_decode($json, true);
À ce stade, $ data est un tableau associatif multidimensionnel. Les problèmes que les développeurs ont rencontrés sont:
Pas correctement jugé si JSON Parsing a réussi <br> Si le format du JSON entrant est incorrect, JSON_DECODE renverra NULL et ne rapportera pas d'erreur. Il doit être jugé à l'aide de JSON_LAST_ERROR () .
Méthode d'accès à objet et à réalité obscurci <br> Lorsque le deuxième paramètre de JSON_DECODE est faux (par défaut), l'objet est renvoyé et l'attribut -> Access est requis; Si c'est vrai , le tableau est retourné et [] l'accès est requis.
L'accès hiérarchique des tableaux multidimensionnels n'est pas considéré comme <br> La rédaction de $ data ['utilisateur'] -> Nom lors de l'accès à un tableau multidimensionnel provoquera une erreur car $ data ['utilisateur'] est un tableau, pas un objet.
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo "JSON Erreur d'analyse:" . json_last_error_msg();
exit;
}
Cette étape peut efficacement éviter les erreurs de traitement ultérieures.
// Démonstration d'erreur(Le deuxième paramètre esttrue,Le résultat est un tableau,Le ____ ne fonctionne pas ->)
echo $data['user']->name; // Rapportera une erreur
// Démonstration correcte
echo $data['user']['name']; // Sortir Alice
Supposons que nous voulons itérer les contacts :
foreach ($data['user']['contacts'] as $contact) {
echo $contact['type'] . ": " . $contact['value'] . "\n";
}
Pour JSON avec des structures complexes et des couches non fixées, l'analyse récursive peut être nécessaire. Exemple:
function printJson($data, $indent = 0) {
if (is_array($data)) {
foreach ($data as $key => $value) {
echo str_repeat(" ", $indent) . $key . ": ";
if (is_array($value)) {
echo "\n";
printJson($value, $indent + 1);
} else {
echo $value . "\n";
}
}
}
}
printJson($data);
Ce code imprime clairement tous les niveaux et les valeurs clés d'un tableau multidimensionnel.
Lorsque l'analyse JSON multidimensionnelle à l'aide de JSON_DECODE , assurez-vous de vérifier si l'analyse est réussie et utilise JSON_LAST_ERROR () .
Définissez clairement le deuxième paramètre passé, décidez de renvoyer un objet ou un tableau, et la méthode d'accès doit être cohérente.
Pour les tableaux ou objets multidimensionnels, accédez aux niveaux avec précision et évitez le mélange -> et [] .
Utilisez des fonctions récursives pour gérer les structures multidimensionnelles complexes en cas de besoin.
Tant que vous maîtrisez les points ci-dessus, vous pouvez éviter efficacement les pièges communs de JSON_DECODE lors de l'analyse des données JSON multidimensionnelles et d'écriture de code PHP plus robuste et maintenable.