Sie sind nicht angemeldet.

EdeN

Rocket Launcher

  • »EdeN« ist der Autor dieses Themas

Beiträge: 294

Wohnort: NRW

Beruf: Techn. Berater für Prozesse im Online-Marketing

  • Nachricht senden

1

Samstag, 1. Oktober 2016, 19:38

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:

Zitat

$article_json = '[{"data1" : {
"ID" : "1",
"headline" : "Test",
"date" : "Test",
"content" : "Test"
},
"data2" : {
"ID": "2",
"headline" : "Tes2t",
"date" : "Test2",
"content" : "Test2"
}}] ';


$article_array = json_decode($article_json);
$article = '';
var_dump($article_array);
echo "Ausgabe: " . var_dump($article_array['data1']['ID']);


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: www.vmaster.de :) !

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »EdeN« (1. Oktober 2016, 19:54)


2

Samstag, 1. Oktober 2016, 19:53

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?

EdeN

Rocket Launcher

  • »EdeN« ist der Autor dieses Themas

Beiträge: 294

Wohnort: NRW

Beruf: Techn. Berater für Prozesse im Online-Marketing

  • Nachricht senden

3

Samstag, 1. Oktober 2016, 19:56

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.
Meine Voodoos: Diamond Monster PCI 1, 3DFX Voodoo 3 2000 PCI, Voodoo 3 3000 AGP, Voodoo 5 5500 AGP (weitere Folgen ;) )

Visit me: www.vmaster.de :) !

EdeN

Rocket Launcher

  • »EdeN« ist der Autor dieses Themas

Beiträge: 294

Wohnort: NRW

Beruf: Techn. Berater für Prozesse im Online-Marketing

  • Nachricht senden

4

Samstag, 1. Oktober 2016, 20:01

Versuch:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            $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-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$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:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$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_jsontrue); 
            
            var_dump($article_array); 
            
            echo "Ausgabe: " $article_array['data1']['headline']; 


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: www.vmaster.de :) !

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »EdeN« (1. Oktober 2016, 20:11)


5

Montag, 10. Oktober 2016, 17:30

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.

EdeN

Rocket Launcher

  • »EdeN« ist der Autor dieses Themas

Beiträge: 294

Wohnort: NRW

Beruf: Techn. Berater für Prozesse im Online-Marketing

  • Nachricht senden

6

Mittwoch, 12. Oktober 2016, 23:56

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: www.vmaster.de :) !

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »EdeN« (13. Oktober 2016, 00:01)


7

Donnerstag, 13. Oktober 2016, 03:07

Ja, du machst var dunp und dann direkt nochmal. Was ist wenn du es nur einmal machst?