PHP JSON zu Array

  • Hallo Voodoo-Gemeinde,

    beruflich benutze ich eher JQuery, HTML, CSS und SQL. Deswegen wollte ich meine PHP-Kenntnisse erweitern und meine Webseite aktualisieren, bzw. für private Zwecke eine komplett neue schreiben (meine aktuelle Webseite ist ein selbstgeschriebener Blog mit den oben genannten Sprachen und PHP, jedoch noch funktional und nicht objektorientiert. Außerdem wollte ich eine Webseite bauen, die mit JSON arbeitet und nicht mit SQL. Das hat keinen besonderen Grund, außer dass ich es mal ohne Datenbank versuchen wollte).

    Der Fehler, auf den ich aktuell laufe, ist banal. Da wird irgendwas falsch formatiert sein, aber irgendwie übersehe ich die ganze Zeit etwas - auch obwohl ich schon einige Beiträge im Internet durchforstet habe (ist bestimmt ein ganz dummer Fehler). Ich weiß nicht, wie aktiv ihr hier seid, aber vielleicht will mir einer helfen:

    Ob ich die eckigen Klammern weglasse oder nicht, ist eigentlich egal. Mache ich die eckigen Klammern weg, kommt der Fehler: Fatal error: Cannot use object of type stdClass as array in /controller.php on line 41.

    Es klappt sowieso nicht. Das JSON wurde ursprünglich mit file_get_contents ausgelesen - was generell auch klappt. Danach wollte ich den Inhalt in einer for-Schleife ausgeben. Diese for-Schleife wollte ich erweitern und die Ausgabe in einen HTML-Code überführen. Da man aber View und Logik trennen soll, habe ich den HTML-Code dafür in einer anderen Datei angelegt. Der Code sieht so aus:

    Zitat

    <div class="article">
    <div class="headline">[headline]</div>
    <div class="date">[date]</div>
    <div class="content">[content]</div>
    </div>

    Wie man sich denken kann, sollen die Platzhalter einfach ersetzt werden. Wenn wir bis zur Ausgabe der IDs gekommen sind, würde ich es selbst weiter versuchen.

    Viele Grüße


    EdeN

    Meine Voodoos: Diamond Monster PCI 1, 3DFX Voodoo 3 2000 PCI, Voodoo 3 3000 AGP, Voodoo 5 5500 AGP (weitere Folgen ;) )

    Visit me: https://www.voodooalert.de/www.vmaster.de :) !

    3 Mal editiert, zuletzt von EdeN (1. Oktober 2016 um 19:54)

  • Ohne Fehlermeldungen kann man dir schlecht helfen. Wie ist die Formatierung? Was sind Fehlermeldungen?
    Hilft es wenn du $article_array = utf8_encode($article_array); machst?

    Warum ist $article = "; ? Sollte es nicht $article = " "; sein?

  • Zitat

    Ohne Fehlermeldungen kann man dir schlecht helfen. Wie ist die Formatierung? Was sind Fehlermeldungen?


    Ich weiß - Mit dem genannten Code bekomme ich keinen Fehler. Es wird nur der Wert bei "echo" nicht ausgegeben. Aus diesem Grund habe ich die eckigen Klammern wieder entfernt und den Fehler oben hinzugefügt. Der lautet wei folgt: Fatal error: Cannot use object of type stdClass as array in /controller.php on line 41

    Zitat

    Hilft es wenn du $article_array = utf8_encode($article_array); machst?


    Versuche ich gleich mal!

    Zitat

    Warum ist $article = "; ? Sollte es nicht $article = " "; sein?


    Da steht eigentlich $article = ' ';. Aber den Code hätte ich auch entfernen können. Der ist erst später relevant, wenn ich die einzelnen Artikel zusammenfügen und ausgeben will.

  • Versuch:

    PHP
    $article_json = '{"data1" : { 				"ID" : "1", 				"headline" : "Test", 				"date" : "Test", 				"content" : "Test" 			}, 				"data2" : { 				"ID": "2",  				"headline" : "Tes2t", 				"date" : "Test2", 				"content" : "Test2" 			}}'; 			$article_json = utf8_encode($article_json); 			$article_array = json_decode($article_json); 			var_dump($article_array); 			echo "Ausgabe: " . var_dump($article_array['data1']['ID']);

    Ausgabe:

    Zitat

    object(stdClass)#5 (2) { ["data1"]=> object(stdClass)#6 (4) { ["ID"]=> string(1) "1" ["headline"]=> string(4) "Test" ["date"]=> string(4) "Test" ["content"]=> string(4) "Test" } ["data2"]=> object(stdClass)#7 (4) { ["ID"]=> string(1) "2" ["headline"]=> string(5) "Tes2t" ["date"]=> string(5) "Test2" ["content"]=> string(5) "Test2" } }
    Fatal error: Cannot use object of type stdClass as array in /controller.php on line 43

    Zur Info: utf_encode habe ich bei der anderen Variable gemacht, weil die Funktion einen String als Eingabewert erwartet.

    /edit1:

    So funktioniert es fast:

    PHP
    $article_json = '{"data1" : { 				"ID" : "1", 				"headline" : "Test", 				"date" : "Test", 				"content" : "Test" 			}, 				"data2" : { 				"ID": "2",  				"headline" : "Tes2t", 				"date" : "Test2", 				"content" : "Test2" 			}}'; 			$article_json = utf8_encode($article_json); 			$article_array = json_decode($article_json); 			var_dump($article_array); 			echo "Ausgabe: " . var_dump($article_array->data1->headline);

    Ich habe das Objekt falsch angesprochen. Bei json_decode fehlt noch ein Parameter.

    /edit2:

    So funktionierts:

    Sagte ja: Ist sicher ein dummer Fehler. Wieder einige Stunden für die Nadel im Heuhaufen gebraucht :bonk::mauer: .

    Meine Voodoos: Diamond Monster PCI 1, 3DFX Voodoo 3 2000 PCI, Voodoo 3 3000 AGP, Voodoo 5 5500 AGP (weitere Folgen ;) )

    Visit me: https://www.voodooalert.de/www.vmaster.de :) !

    2 Mal editiert, zuletzt von EdeN (1. Oktober 2016 um 20:11)

  • Kannst du mal echo var_dump() machen? Wuerde gerne mal wissen ob das geht. Benutzt du eine IDE zum entwickeln? Wenn ja, welche? Codeblocks konnte glaube ich PHP. Und KDevelop kann PHP. Da sind noch ein paar weitere gute freie IDE's zum benutzen.

  • Hi, das habe ich schon einige male gemacht, aber habe den Code gerade nicht mehr offen. Gucke vielleicht später nochmal. Als IDE benutze ich aktuell Microsoft Webmatrix, weil es eine direkte FTP- und Github-Anbindung hat und ziemlich einfach zu bedienen ist. Auf der Arbeit nutze ich manchmal Eclipse - Für kurze Angelegenheiten aber oft auch einfach nur Notepad++.

    /edit: Im ersten Code-Block, Zeile 20, habe ich doch echo und var_dump gemacht oder? Wo meinst du genau?

    Meine Voodoos: Diamond Monster PCI 1, 3DFX Voodoo 3 2000 PCI, Voodoo 3 3000 AGP, Voodoo 5 5500 AGP (weitere Folgen ;) )

    Visit me: https://www.voodooalert.de/www.vmaster.de :) !

    Einmal editiert, zuletzt von EdeN (13. Oktober 2016 um 00:01)