Frage von LinoBla, 46

Rückgabewert von Objekt richtig verarbeiten?

Ich bekomme folgendes von meiner PHP-Klasse zurück:

abstract_json_fopen Object
 ( [file] =>
   [test.json] => {
       "Kategorie":[
            {
                "Position":0,
                "Name":"Test",
                "Inhalt":
                [
                    {
                        "Name":"Google.com",
                        "URL":""
                    },
                    {
                        "Name":"Heise",
                        "URL":""
                    }
                ]
            },
            {
                "Position":1,
                "Name":"ABCD",
                "Inhalt":
                [
                    {
                        "Name":"Google.com",
                        "URL":""
                    },
                    {
                        "Name":"Heise",
                        "URL":""
                    },
                    {
                        "Name":"zapf",
                        "URL":""
                    }
                ]
            }
       ]
   }
 )

Das Problem welches ich habe, ist dass ich die Daten nicht richtig weiter verarbeiten kann.

Einer meine versuche sah in etwa so aus:

echo "<table>";
    for($i = 0; $i<$nr; $i++){
       echo "<tr>";
            echo "<th>". $data->$datei->Kategorie[$i]->name."</th>";
       echo "</tr>";
       $nr1 = count($data->$datei->Kategorie[$i]->Inhalt);
       for($l=0; $l<$nr1; $l++){
            echo "<tr>";
                echo "<td>";
                    echo $data->$datei->Kategorie[$i]->Name;
                echo "</td>";
            echo "</tr>";
       }
    }
    echo "</table>";

Wo liegt mein Fehler?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von trinky, 33

Was willst Du denn genau anstellen?

Das sieht nach einem JSON-Objekt aus, das Du mit json_decode() in ein PHP-Objekt umwandeln kannst. Durch den Zusatzparameter "true" wird es ein Array statt Objekt.

Kommentar von LinoBla ,

Ich habe den Titel schon verändert, muss nur noch freigeschaltet werden.

Danke für den Hinweis, ich werde es mal mit dem Zusatzparameter versuchen.

Antwort
von maximilianus7, 14

die letzte schleife macht keinen sinn: du willst doch über das array inhalt iterieren, den namen hast du ja schon:

foreach ( $data->$datei->Kategorie[$i]->Inhalt as $inh )
{
echo "<tr>";
echo "<td>";
echo $inh->Name;
echo "</td>";
echo "</tr>";
}


den index l (musste mich erst vergewissern, dass du tatsächlich klein-L und nicht groß-I geschrieben hast) verwendest du ja gar nicht. aber ein array kannst du ja eleganter mit foreach statt for abarbeiten.

Kommentar von LinoBla ,

Wie ich die Daten später verarbeite ist weniger ein Problem.
Überhaupt an diese heranzukommen bereitet mir aktuell noch Problme, wenn ich es wie du vorgeschlagen hast mit

$data->$datei->Kategorie[$i]->Inhalt
//bzw.
print_r($data->$datei->Kategorie[1]->Inhalt);

Versuche kommt folgender Fehler:

PHP Notice: Trying to get property of non-object in C:\Users\XXX\Desktop\php\index.php on line 9 PHP Notice: Trying to get property of non-object in C:\Users\XXX\Desktop\php\index.php on line 9

Wenn ich das nicht falsch verstehe ist "Kategorie" kein Objekt, oder?


Kommentar von maximilianus7 ,

kategorie ist ein array von objekten, also kategorie[$i] ein objekt.

aber halt: da hat doch ein kollege vorgeschlagen, den 2. param beim parsen mit true (= mach objekte zu arrays) anzugeben. wenn du das getan hast, dann natürlich nicht. lass den dann mal wieder weg.

Kommentar von LinoBla ,

Den zweiten Parameter habe ich vor meinen tests wieder raus genommen.

Antwort
von maximilianus7, 17

was steht in $data und $datei ?

Kommentar von LinoBla ,

In $datei steht: $datei = 'test.json';

und in $data steht:

abstract_json_fopen Object ( [file] => [test.json] => { "Kategorie":[ { "Position":0, "Name":"Test", "Inhalt":[ { "Name":"Google.com", "URL":"http://google.com" }, { "Name":"Heise", "URL":"http://heise.de" } ] }, { "Position":1, "Name":"ABCD", "Inhalt":[ { "Name":"Google.com", "URL":"http://google.com" }, { "Name":"Heise", "URL":"http://heise.de" }, { "Name":"zapf", "URL":"http://zapf.de" } ] } ] } )

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten