Dies soll eine allgemeine Referenzfrage und -antwort sein, die viele der nie endenden Fragen "Wie greife ich in meinem JSON auf Daten zu?" Abdeckt. Fragen. Hier werden die allgemeinen Grundlagen des Dekodierens von JSON in PHP und des Zugriffs auf die Ergebnisse behandelt.
Ich habe den JSON:
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}
Wie dekodiere ich dies in PHP und greife auf die resultierenden Daten zu?
Antworten:
Intro
Zuerst haben Sie eine Zeichenfolge. JSON ist kein Array, kein Objekt oder keine Datenstruktur. JSON ist ein textbasiertes Serialisierungsformat - also eine ausgefallene Zeichenfolge, aber immer noch nur eine Zeichenfolge. Dekodieren Sie es in PHP mit
json_decode()
.Darin finden Sie vielleicht:
Dies sind die Dinge, die in JSON codiert werden können. Genauer gesagt sind dies PHP-Versionen der Dinge, die in JSON codiert werden können.
Sie haben nichts Besonderes. Sie sind keine "JSON-Objekte" oder "JSON-Arrays". Sie haben den JSON dekodiert - Sie haben jetzt grundlegende alltägliche PHP-Typen .
Objekte werden Instanzen von stdClass sein , einer integrierten Klasse, die nur eine generische Sache ist , die hier nicht wichtig ist.
Zugriff auf Objekteigenschaften
Sie greifen auf die Eigenschaften eines dieser Objekte genauso zu wie auf die öffentlichen nicht statischen Eigenschaften eines anderen Objekts, z
$object->property
.Zugriff auf Array-Elemente
Sie greifen auf die Elemente eines dieser Arrays genauso zu wie auf jedes andere Array, z
$array[0]
.Iterieren Sie darüber mit
foreach
.Oder spielen Sie mit einer der unzähligen integrierten Array-Funktionen .
Zugriff auf verschachtelte Elemente
Die Eigenschaften von Objekten und die Elemente von Arrays können mehr Objekte und / oder Arrays sein. Sie können einfach weiterhin wie gewohnt auf deren Eigenschaften und Elemente zugreifen, z
$object->array[0]->etc
.Passing
true
als zweites Argument zu json_decode ()Wenn Sie dies tun, erhalten Sie anstelle von Objekten assoziative Arrays - Arrays mit Zeichenfolgen für Schlüssel. Sie greifen wieder wie gewohnt auf deren Elemente zu, z
$array['key']
.Zugriff auf assoziative Array-Elemente
Wenn Sie ein JSON- Objekt in ein assoziatives PHP-Array dekodieren , können Sie sowohl Schlüssel als auch Werte mithilfe der
foreach (array_expression as $key => $value)
Syntax iterieren , zDruckt
Ich weiß nicht, wie die Daten strukturiert sind
Lesen Sie die Dokumentation zu dem, von dem Sie den JSON erhalten.
Schauen Sie sich den JSON an - wo Sie sehen, dass geschweifte Klammern
{}
ein Objekt erwarten, wo Sie sehen, dass eckige Klammern[]
ein Array erwarten.Treffen Sie die dekodierten Daten mit einem
print_r()
:und überprüfen Sie die Ausgabe:
Hier erfahren Sie, wo Sie Objekte haben, wo Sie Arrays haben, sowie die Namen und Werte ihrer Mitglieder.
Wenn Sie nur so weit hinein kommen können, bevor Sie sich verlaufen - gehen Sie so weit und treffen Sie das mit
print_r()
:Schauen Sie sich das in diesem praktischen interaktiven JSON-Explorer an .
Teilen Sie das Problem in Teile auf, die sich leichter um den Kopf wickeln lassen.
json_decode()
kehrt zurücknull
Dies geschieht, weil entweder:
null
.json_last_error_msg
oder setzen Sie es durch etwas wie JSONLint .json_decode()
.Wenn Sie die maximale Tiefe ändern müssen, lösen Sie wahrscheinlich das falsche Problem. Finden Sie heraus, warum Sie so tief verschachtelte Daten erhalten (z. B. der Dienst, den Sie abfragen und der den JSON generiert, hat einen Fehler), und lassen Sie dies nicht passieren.
Der Name der Objekteigenschaft enthält ein Sonderzeichen
Manchmal haben Sie einen Objekteigenschaftsnamen, der so etwas wie einen Bindestrich
-
oder ein Vorzeichen enthält und@
nicht in einer Literal-ID verwendet werden kann. Stattdessen können Sie ein Zeichenfolgenliteral in geschweiften Klammern verwenden, um es zu adressieren.Wenn Sie eine Ganzzahl als Eigenschaft haben, lesen Sie: Wie greife ich auf Objekteigenschaften mit Namen wie Ganzzahlen zu? als Referenz.
Jemand hat JSON in Ihr JSON eingefügt
Es ist lächerlich, aber es passiert - in Ihrem JSON ist JSON als Zeichenfolge codiert. Dekodieren Sie, greifen Sie wie gewohnt auf die Zeichenfolge zu, dekodieren Sie diese und gelangen Sie schließlich zu dem, was Sie benötigen.
Daten passen nicht in den Speicher
Wenn Ihr JSON zu groß ist
json_decode()
, um sofort damit fertig zu werden, wird es schwierig. Sehen:Wie man es sortiert
Siehe: Referenz: Alle grundlegenden Möglichkeiten zum Sortieren von Arrays und Daten in PHP .
quelle
Mit json_decode () können Sie einen json-String in ein PHP-Objekt / Array konvertieren.
Z.B.
Eingang:
Ausgabe:
Einige Punkte, an die Sie sich erinnern sollten:
json_decode
erfordert, dass die Zeichenfolge gültig ist,json
sonst wird sie zurückgegebenNULL
.json_last_error()
kann die genaue Art des Fehlers bestimmt werden.utf8
Inhalte übergeben, dajson_decode
sonst Fehler auftreten können, und geben Sie einfach einenNULL
Wert zurück.quelle
quelle
Wir können json string mit der Funktion json_decode in php in ein Array dekodieren
1) json_decode ($ json_string) // es wird ein Objekt zurückgegeben
2) json_decode ($ json_string, true) // gibt ein Array zurück
quelle
Erwägen Sie die Verwendung von
JSONPath
https://packagist.org/packages/flow/jsonpathEs gibt eine ziemlich klare Erklärung, wie man es verwendet und eine JSON-Datei analysiert, wobei alle vorgeschlagenen Schleifen vermieden werden . Wenn Sie sind vertraut mit
XPath
fürXML
Sie diesen Ansatz beginnt zu lieben.quelle
Ich habe ein Paket namens
JSON
( GitHub , Packagist ) geschrieben. Wenn Sie den Aufwand für die Verwendung vonjson_*
Funktionen vermeiden möchten , sollten Sie es versuchen.Beispiel
Sehen Sie sich das Wiki oder das kurze Tutorial an, um sich damit vertraut zu machen.
Wenn Sie JSON-Dateien lesen und deren Daten extrahieren möchten (anscheinend versuchen Sie dies auszuführen), lesen Sie das JSONFile- Paket, das ich ebenfalls geschrieben habe.
quelle
https://paiza.io/projects/X1QjjBkA8mDo6oVh-J_63w
Überprüfen Sie den folgenden Code zum Konvertieren von json in Array in
PHP
. Wenn JSON korrekt ist,json_decode()
funktioniert es gut und gibt ein Array zurück. Wenn JSON jedoch fehlerhaft ist, wird es zurückgegebenNULL
.Wenn JSON fehlerhaft ist und Sie nur ein Array erwarten, können Sie diese Funktion verwenden:
Wenn JSON fehlerhaft ist und Sie die Codeausführung stoppen möchten, können Sie diese Funktion verwenden:
Sie können jede Funktion verwenden, abhängig von Ihrer Anforderung,
quelle