Das Grundformat der Funktion JSON_DECODE ist wie folgt:
$data = json_decode($jsonString, true);
Der erste Parameter ist die JSON -Zeichenfolge.
Wenn der zweite Parameter wahr ist, wird das Ergebnis in ein assoziatives Array analysiert. Wenn es weggelassen oder falsch ist , wird das Objekt zurückgegeben.
Angenommen, wir haben die folgenden mehrdimensionalen JSON -Daten:
{
"user": {
"name": "Alice",
"contacts": [
{"type": "email", "value": "[email protected]"},
{"type": "phone", "value": "123456789"}
]
}
}
Code analysieren:
$json = '{"user":{"name":"Alice","contacts":[{"type":"email","value":"[email protected]"},{"type":"phone","value":"123456789"}]}}';
$data = json_decode($json, true);
Zu diesem Zeitpunkt ist $ Data ein mehrdimensionales assoziatives Array. Die Probleme, auf die viele Entwickler begegnet sind, sind:
Nicht richtig beurteilt, ob JSON Parsing erfolgreich war <br> Wenn das Format des eingehenden JSON falsch ist, gibt JSON_Decode NULL zurück und meldet keinen Fehler. Es muss mit JSON_LAST_ERROR () beurteilt werden.
Verschleierte Objekt- und Array -Zugriffsmethode <br> Wenn der zweite Parameter von JSON_DECODE falsch ist (Standard), wird das Objekt zurückgegeben und das Attribut -> Zugriff ist erforderlich. Wenn wahr , wird das Array zurückgegeben und [] Zugriff ist erforderlich.
Hierarchischer Zugang mehrdimensionaler Arrays wird nicht als <br> betrachtet Das Schreiben von $ Data ['Benutzer']-> Name beim Zugriff auf ein mehrdimensionales Array verursacht einen Fehler, da $ data ['Benutzer'] ein Array ist, kein Objekt.
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo "JSON Parsing -Fehler:" . json_last_error_msg();
exit;
}
Dieser Schritt kann nachfolgende Verarbeitungsfehler effektiv vermeiden.
// Fehlerdemonstration(Der zweite Parameter isttrue,Das Ergebnis ist ein Array,Das ____ funktioniert nicht ->)
echo $data['user']->name; // Meldet einen Fehler
// Richtige Demonstration
echo $data['user']['name']; // Ausgabe Alice
Angenommen, wir wollen über Kontakte iterieren:
foreach ($data['user']['contacts'] as $contact) {
echo $contact['type'] . ": " . $contact['value'] . "\n";
}
Für JSONs mit komplexen Strukturen und nicht gemixten Schichten kann eine rekursive Parsen erforderlich sein. Beispiel:
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);
Dieser Code druckt deutlich alle Ebenen und Schlüsselwerte eines mehrdimensionalen Arrays.
Überprüfen Sie, ob das Parsen erfolgreich ist, wenn Sie mehrdimensionales JSON mit JSON_DECODE analysieren, ob das Parsen erfolgreich ist, und verwenden Sie JSON_LAST_ERROR () .
Definieren Sie klar, dass der zweite Parameter übergeben wird, ob ein Objekt oder ein Array zurückgegeben werden soll, und die Zugriffsmethode muss konsistent sein.
Für mehrdimensionale Arrays oder Objekte zu Zugangsniveaus und vermeiden Sie Mischen -> und [] .
Verwenden Sie rekursive Funktionen, um bei Bedarf komplexe mehrdimensionale Strukturen zu verarbeiten.
Solange Sie die oben genannten Punkte beherrschen, können Sie die gemeinsamen Fallen von JSON_DECODE bei der Parsen mehrdimensionaler JSON-Daten effektiv vermeiden und robusteren und aufhaltbaren PHP-Code schreiben.