Wie kann man mit PHP Daten aus JSON extrahieren und darauf zugreifen?

Lesezeit: 11 Minuten

Wie kann man mit PHP Daten aus JSON extrahieren und
Benutzer3942918

Dies soll eine allgemeine Referenzfrage und -antwort sein, die viele der nie endenden Fragen abdeckt “Wie greife ich auf Daten in meinem JSON zu?” Fragen. Hier werden die allgemeinen Grundlagen der Decodierung von JSON in PHP und der Zugriff auf die Ergebnisse behandelt.

Ich habe die JSON:

{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}

Wie decodiere ich dies in PHP und greife auf die resultierenden Daten zu?

  • Verwandte: Kann eine Variable in der Ausgabe von print_r() sehen, ist sich aber nicht sicher, wie man im Code darauf zugreift, hier ist eine interaktive JSON-Exploration im Kontext von PHP möglich: array.include-once.org

    – hakre

    27. März 2015 um 21:09 Uhr

  • Kann ich bitte wissen, warum diese Frage nicht als doppelte Frage betrachtet wird, selbst wenn 9 oder weniger Benutzer als Duplikat für stackoverflow.com/questions/4343596/parsing-json-file-with-php markiert sind? m

    – Ich bin die dümmste Person

    9. August 2017 um 5:46 Uhr


  • @IamtheMostStupidPerson Ich werde versuchen, es zu erklären, auch wenn dein Benutzername mich bezweifeln lässt, dass du ihn verstehst ;). Diese Frage wird gestellt und ihre Antworten werden auf “kanonische” Weise geschrieben. Daher ist es ein besserer Empfänger für doppelte Ziele als die anderen Fragen.

    – Félix Adriyel Gagnon-Grenier

    25. Februar 2018 um 20:13 Uhr

Wie kann man mit PHP Daten aus JSON extrahieren und
Benutzer3942918

Einleitung

Zunächst einmal haben Sie eine Zeichenfolge. JSON ist kein Array, Objekt oder Datenstruktur. JSON ist ein textbasiertes Serialisierungsformat – also ein schicker String, aber immer noch nur ein String. Decodieren Sie es in PHP mit json_decode().

 $data = json_decode($json);

Darin könnten Sie finden:

Dies sind die Dinge, die in JSON codiert werden können. Oder genauer gesagt, dies sind PHP-Versionen der Dinge, die in JSON codiert werden können.

Es gibt nichts Besonderes an ihnen. Sie sind keine „JSON-Objekte“ oder „JSON-Arrays“. Sie haben den JSON entschlüsselt – Sie haben es jetzt grundlegende alltägliche PHP-Typen.

Objekte werden Instanzen von sein stdClasseine eingebaute Klasse, die nur eine allgemeine Sache ist, die hier nicht wichtig ist.


Zugriff auf Objekteigenschaften

Sie greifen auf die zu Eigenschaften eines dieser Objekte auf die gleiche Weise wie für die öffentlichen nicht statischen Eigenschaften eines anderen Objekts, z $object->property.

$json = '
{
    "type": "donut",
    "name": "Cake"
}';

$yummy = json_decode($json);

echo $yummy->type; //donut

Zugriff auf Array-Elemente

Sie greifen auf die Elemente eines dieser Arrays genauso zu wie auf jedes andere Array, z $array[0].

$json = '
[
    "Glazed",
    "Chocolate with Sprinkles",
    "Maple"
]';

$toppings = json_decode($json);

echo $toppings[1]; //Chocolate with Sprinkles

Iterieren Sie darüber mit foreach.

foreach ($toppings as $topping) {
    echo $topping, "\n";
}

Glasiert
Schokolade mit Streuseln
Ahorn

Oder verwirren Sie mit einem der Bazillion eingebaute Array-Funktionen.


Zugriff auf verschachtelte Elemente

Die Eigenschaften von Objekten und die Elemente von Arrays können mehrere Objekte und/oder Arrays sein – Sie können einfach weiterhin wie gewohnt auf ihre Eigenschaften und Mitglieder zugreifen, z $object->array[0]->etc.

$json = '
{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}';

$yummy = json_decode($json);

echo $yummy->toppings[2]->id; //5004

Vorbeigehen 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. Auch hier greifen Sie wie gewohnt auf die Elemente zu, z $array['key'].

$json = '
{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}';

$yummy = json_decode($json, true);

echo $yummy['toppings'][2]['type']; //Maple

Zugriff auf assoziative Array-Elemente

Beim Decodieren einer JSON Objekt zu einem assoziativen PHP-Array können Sie sowohl Schlüssel als auch Werte mit iterieren foreach (array_expression as $key => $value) Syntax, z

$json = '
{
    "foo": "foo value",
    "bar": "bar value",
    "baz": "baz value"
}';

$assoc = json_decode($json, true);
foreach ($assoc as $key => $value) {
    echo "The value of key '$key' is '$value'", PHP_EOL;
}

Drucke

Der Wert des Schlüssels „foo“ ist „foo value“.
Der Wert des Schlüssels ‘bar’ ist ‘bar value’
Der Wert des Schlüssels ‘baz’ ist ‘baz value’


Keine Ahnung, wie die Daten aufgebaut sind

Lesen Sie die Dokumentation für das, wovon Sie den JSON erhalten.

Schauen Sie sich das JSON an – wo Sie geschweifte Klammern sehen {} erwarten Sie ein Objekt, bei dem Sie eckige Klammern sehen [] Erwarte ein Array.

Schlagen Sie die decodierten Daten mit a an print_r():

$json = '
{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}';

$yummy = json_decode($json);

print_r($yummy);

und überprüfe die Ausgabe:

stdClass Object
(
    [type] => donut
    [name] => Cake
    [toppings] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 5002
                    [type] => Glazed
                )

            [1] => stdClass Object
                (
                    [id] => 5006
                    [type] => Chocolate with Sprinkles
                )

            [2] => stdClass Object
                (
                    [id] => 5004
                    [type] => Maple
                )

        )

)

Es wird Ihnen sagen, wo Sie Objekte haben, wo Sie Arrays haben, zusammen mit den Namen und Werten ihrer Mitglieder.

Wenn Sie nur so weit hineinkommen können, bevor Sie sich verlaufen – gehen Sie so weit und schlagen Sie zu das mit print_r():

print_r($yummy->toppings[0]);
stdClass Object
(
    [id] => 5002
    [type] => Glazed
)

Schau es dir doch mal an diesen praktischen interaktiven JSON-Explorer.

Teilen Sie das Problem in Teile auf, die Sie leichter umreißen können.


json_decode() kehrt zurück null

Dies geschieht, weil entweder:

  1. Der JSON besteht ausschließlich aus genau dem, null.
  2. Der JSON ist ungültig – überprüfen Sie das Ergebnis von json_last_error_msg oder setzen Sie es durch so etwas wie JSONLint.
  3. Es enthält Elemente, die mehr als 512 Ebenen tief verschachtelt sind. Diese standardmäßige maximale Tiefe kann überschrieben werden, indem eine Ganzzahl als drittes Argument an übergeben wird 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 von Ihnen abgefragte Dienst, der JSON generiert, hat einen Fehler) und sorgen Sie dafür, dass dies nicht passiert.


Objekteigenschaftenname enthält ein Sonderzeichen

Manchmal haben Sie einen Objekteigenschaftsnamen, der so etwas wie einen Bindestrich enthält - oder am Zeichen @ was nicht in einem wörtlichen Bezeichner verwendet werden kann. Stattdessen können Sie ein Zeichenfolgenliteral in geschweiften Klammern verwenden, um es anzusprechen.

$json = '{"@attributes":{"answer":42}}';
$thing = json_decode($json);

echo $thing->{'@attributes'}->answer; //42

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 – es gibt JSON, das als Zeichenfolge in Ihrem JSON codiert ist. Decodieren, wie gewohnt auf den String zugreifen, decodieren dasund kommen Sie schließlich zu dem, was Sie brauchen.

$json = '
{
    "type": "donut",
    "name": "Cake",
    "toppings": "[{ \"type\": \"Glazed\" }, { \"type\": \"Maple\" }]"
}';

$yummy = json_decode($json);
$toppings = json_decode($yummy->toppings);

echo $toppings[0]->type; //Glazed

Daten passen nicht in den Speicher

Wenn Ihr JSON zu groß ist für json_decode() sofort zu handhaben, wird es schwierig. Sehen:

  • Verarbeitung großer JSON-Dateien in PHP
  • So iterieren Sie richtig durch eine große JSON-Datei

Wie man es sortiert

Siehe: Referenz: Alle grundlegenden Methoden zum Sortieren von Arrays und Daten in PHP.

  • bin gerade über diese Antwort gestolpert und habe den Link zu gefunden array.include-once.org ist kaputt.

    – Jeff

    22. September 2017 um 22:47 Uhr

  • Ja, in Anbetracht des Namens des Links und wie Sie ihn beschrieben haben, klingt es wie ein echter Mist.

    – Jeff

    22. September 2017 um 23:04 Uhr

  • Das einzige, was dieser Lösung fehlt, war das Extrahieren von Daten aus einer anderen JSON-Datei. Ich würde diese Lösung empfehlen: stackoverflow.com/questions/19758954/…

    – Ishan Srivastava

    23. Oktober 2017 um 21:58 Uhr

  • Das ist wirklich schön, das ist es. Jede einzelne Klarstellung, die ich zum Kodieren / Dekodieren von JSON benötigte, fand ich hier. Ich musste diese Seite sogar mit einem Lesezeichen versehen, um sie einfach nachschlagen zu können. Du bist ein echtes Genie.

    – Chimdi

    10. November 2021 um 17:11 Uhr


  • Ist es wirklich notwendig, auf assoziative Arrays sowohl über den nummerierten als auch über den verschlüsselten Index zuzugreifen? Kann man nicht nur den Schlüssel verwenden?

    – Hashim Aziz

    25. Februar um 0:16 Uhr


Sie können verwenden json_decode() um einen JSON-String in ein PHP-Objekt/Array zu konvertieren.

Z.B.

Eingang:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

Ausgabe:

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

Einige Punkte, an die Sie sich erinnern sollten:

  • json_decode erfordert, dass die Zeichenfolge gültig ist json sonst geht es zurück NULL.
  • Falls die Dekodierung fehlschlägt, json_last_error() kann verwendet werden, um die genaue Art des Fehlers zu bestimmen.
  • Stellen Sie sicher, dass Sie vorbeikommen utf8 Inhalt bzw json_decode kann einen Fehler auslösen und einfach a zurückgeben NULL Wert.

  • Der wahrscheinlichere Grund ist wahrscheinlich, dass es bereits beantwortet wurde und es so aussieht, als ob @MohdAbdulMujib hinter einer kostenlosen Wiederholung her ist

    – Isaak

    11. Januar 2017 um 21:18 Uhr

  • @Isaac Einige Leute sind möglicherweise nicht sehr daran interessiert, das gesamte Handbuch zu lesen, wenn sie nur mit der Verwendung der Funktion beginnen möchten. Andernfalls sollten sie besser das offizielle Dokument lesen. Der springende Punkt bei SO ist die Einfachheit, in der die Antworten gegeben werden. meiner bescheidenen Meinung nach

    – Mohd Abdul Mujib

    12. Januar 2017 um 2:28 Uhr

1647107050 210 Wie kann man mit PHP Daten aus JSON extrahieren und
Sayeed amin

// Using json as php array 

$json = '[{"user_id":"1","user_name":"Sayeed Amin","time":"2019-11-06 13:21:26"}]';

//or use from file
//$json = file_get_contents('results.json');

$someArray = json_decode($json, true);

foreach ($someArray as $key => $value) {
    echo $value["user_id"] . ", " . $value["user_name"] . ", " . $value["time"] . "<br>";
}

  • Würde dies immer noch funktionieren, wenn die Daten so groß wie 29 MB sind, bitte helfen Sie. kannst du ein beispiel geben? Ich brauche nur die aktuelle Zahl der Covid-Fälle in der AFG. covid.ourworldindata.org/data/owid-covid-data.json

    – jzuri

    23. August 2021 um 17:28 Uhr


Wir können die json-Zeichenfolge mithilfe der json_decode-Funktion in PHP in ein Array dekodieren

1) json_decode($json_string) // gibt Objekt zurück

2) json_decode($json_string,true) // es gibt ein Array zurück

$json_string = '{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}';
$array = json_decode($json_string,true);

echo $array['type']; //it gives donut

Erwägen Sie die Verwendung JSONPath https://packagist.org/packages/flow/jsonpath

Es gibt eine ziemlich klare Erklärung, wie man es benutzt und eine JSON-Datei analysiert Vermeidung aller Schleifen vorgeschlagen. Wenn Sie sich auskennen XPath zum XML Sie werden anfangen, diesen Ansatz zu lieben.

Die akzeptierte Antwort ist sehr detailliert und in den meisten Fällen korrekt.

Ich möchte nur hinzufügen, dass ich beim Versuch, eine mit UTF8 codierte JSON-Textdatei zu laden, eine Fehlermeldung erhalten habe. Ich hatte eine gut formatierte JSON, aber „json_decode“ gab mir immer NULL zurück, es lag an der Stücklistenmarke.

Um es zu lösen, habe ich diese PHP-Funktion erstellt:

function load_utf8_file($filePath)
{
    $response = null;
    try
    {
        if (file_exists($filePath)) {
            $text = file_get_contents($filePath);
            $response = preg_replace("/^\xEF\xBB\xBF/", '', $text);          
        }     
    } catch (Exception $e) {
      echo 'ERROR: ',  $e->getMessage(), "\n";
   }
   finally{  }
   return $response;
}

Dann verwende ich es so, um eine JSON-Datei zu laden und daraus einen Wert zu erhalten:

$str = load_utf8_file('appconfig.json'); 
$json = json_decode($str, true); 
//print_r($json);
echo $json['prod']['deploy']['hostname'];

https://paiza.io/projects/X1QjjBkA8mDo6oVh-J_63w

Überprüfen Sie den folgenden Code zum Konvertieren von JSON in Array in PHPWenn JSON dann richtig ist json_decode() funktioniert gut und gibt ein Array zurück, aber wenn JSON falsch formatiert ist, wird es zurückgegeben NULL,

<?php
function jsonDecode1($json){
    $arr = json_decode($json, true);
    return $arr;
}

// In case of malformed JSON, it will return NULL
var_dump( jsonDecode1($json) );

Wenn JSON falsch formatiert ist und Sie nur ein Array erwarten, können Sie diese Funktion verwenden.

<?php
function jsonDecode2($json){
    $arr = (array) json_decode($json, true);
    return $arr;
}

// In case of malformed JSON, it will return an empty array()
var_dump( jsonDecode2($json) );

Wenn JSON falsch formatiert ist und Sie die Codeausführung stoppen möchten, können Sie diese Funktion verwenden.

<?php
function jsonDecode3($json){
    $arr = (array) json_decode($json, true);

    if(empty(json_last_error())){
        return $arr;
    }
    else{
        throw new ErrorException( json_last_error_msg() );
    }
}

// In case of malformed JSON, Fatal error will be generated
var_dump( jsonDecode3($json) );

Sie können jede Funktion verwenden, abhängig von Ihren Anforderungen,

994640cookie-checkWie kann man mit PHP Daten aus JSON extrahieren und darauf zugreifen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy