Ankündigung

Einklappen
Keine Ankündigung bisher.

JSON konform Array hinzufügen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JSON konform Array hinzufügen

    Hallo zusammen,

    sicherlich eine einfache Frage, aber meine Lösungsansätze bringen mich zu keinem Ergebniss.


    PHP-Code:
    $handle fopen "$dateiname""w" );

    $artikel = array();
    $artikel[111]['datum'] = 'test1';
    $artikel[111]['uhrzeit'] = 'test2';
    $artikel[111]['test'] = 'xxxxxxxx';

    $result = array ('artikel' => $artikel);

    fwrite($handlejson_encode($result));

    fclose $handle ); 

    Damit erstelle ich eine JSON Datei. Mit diesem Code klappt es auch wunderbar. Raus kommt...

    Code:
    {"artikel":{"111":{"datum":"test1","uhrzeit":"test2","test":"xxxxxxxx"}}}

    Jetzt zu meinem Problem...
    Nun möchte ich einen weitern Eintrag (glaube Array oder doch Objekt) (bsp. mit dem Index/Key 222) hinzufügen.
    Ich habe es folgendermassen probiert...


    PHP-Code:
    //Öffne hier die Datei im Schreib UND Lese Modus
    $handle fopen "$dateiname""w+" );
    //lese meine vorhandene test.json ein
    $json_erweitern json_decode($handletrue);

        
    //erstelle ein neues Array
        
    $artikel = array();
        
    $artikel[222]['datum'] = 'test1';
        
    $artikel[222]['uhrzeit'] = 'test2';
        
    $artikel[222]['test'] = 'xxxxxxxx';

        
    $result = array ('artikel' => $artikel );

        
    //HIER VERSUCHE ICH DIESE BEIEN IRGENDWIE ZUSAMMEN ZU BEKOMMEN (Weder das eine, noch das andere Funktioniert)
        
    $neu_arr array_merge($json_erweitern$result);
        
    //$neu_arr = $json_erweitern + $result;


        
    fwrite($handlejson_encode($neu_arr));

        
    fclose $handle ); 
    Code:
    "{"artikel":{"111":{"datum":"test1","uhrzeit":"test2","test":"xxxxxxxx"},"222":{"datum":"test1","uhrzeit":"test2","test":"xxxxxxxx"}}}"
    So, sollte es schlussendlich aussehen. Sollte ich den Trick einmal raus haben, geht auch die weitere anpassung reibungslos, aber hier hackt es.
    Natürlich JSON konform und nicht das Array am ende des vorhandenen einfach anfügen.


    Viele Grüße

  • #2
    Du musst das bisher geschriebene JSON wieder einlesen (json_decode), dann das Array um deinen neuen Eintrag erweitern und anschließend kannst du es so wie oben wieder abspeichern.

    Anbei die Anführungszeichen um die Variable herum sind überflüssig.
    PHP-Code:
    $handle fopen "$dateiname""w+" );
    $handle fopen ($dateiname"w+"); 

    Kommentar


    • #3
      Hallo ChromOxid,

      das Prinzip habe ich verstanden, nur das wie umsetzen.
      Ich hab schon zig variationen ausprobiert, aber immer kommt ein "null" dabei raus raus.

      Danke für die Anführungszeichen.

      Viele Grüße

      PS. Hier gibt es einen Fehler... bei
      $neu_arr = array_merge($result, $json_erweitern);
      gibt es immer die Fehlermeldung...
      Warning: array_merge() [function.array-merge]: Argument #2 is not an array in...
      Wobei es heisst mit dem "true" im json_decode, json_decode($handle, true);, soll ein Array raus kommen

      Kommentar


      • #4
        Hier mal angedeutet ohne einlesen der Datei:
        https://eval.in/959757

        PHP-Code:
        $eingeleseneArray = [
            
        'artikel' => [
                
        111 => [
                    
        'datum' => 111,
                    
        'uhrzeit' => 122
                
        ]
            ]
        ];

        var_dump($eingeleseneArray);

        $eingeleseneArray['artikel'][222] = [
            
        'datum' => 211,
            
        'uhrzeit' => 222
        ];

        var_dump($eingeleseneArray); 

        Kommentar


        • #5
          Schau dir mal den Rückgabewert von fopen(). Tipp, da steht kein String drin
          Du suchst eher sowas: http://php.net/manual/de/function.file-get-contents.php

          Kommentar


          • #6
            Danke,

            habe den "einen" Fehler schon selbst entdeckt....
            Das da noch ein file_get_contents noch hin muss.
            aber var_dump gibt immer NULL aus, obwohl die Datei wirklich existiert. Vielleicht war dies schon immer mein Problem, das da nie etwas gekommen ist.

            Code:
            $str_data = file_get_contents('artikel.json');
             var_dump($str_data);

            Kommentar


            • #7
              So, nun habe ich das fopen erst einmal weg gelassen, nun gibt auch file_get_contents auch etwas aus.
              Jetzt nur noch an mein ursprüngliches Problem, diese beiden zu verbinden.

              Kommentar


              • #8
                Was willst du verbinden? Datei einlesen -> JSON parsen -> Daten verändern -> JSON generieren -> Datei speichern. Ist doch ganz simpel.

                PHP-Code:
                $data json_decode(file_get_contents('data.json'));

                $data['new_entry'] = [
                    
                'foo' => 1,
                    
                'bar' => 2
                ];

                file_put_contents('data.json'json_encode($data)); 

                Kommentar


                • #9
                  Naja, wenn es für mich so einfach wäre, dann würde ich nicht solch eine Frage stellen...

                  var_dump gibt nun für beides ein array aus… Immerhin

                  Ja ich stelle mich vielleicht etwas dämlich an, aber zu einer Lösung komme ich immer noch nicht. Ich dachte eigentlich dafür sei genau "array_merge" da.
                  Aus den einzelnen beiden, soll das unten stehende werden.

                  Code:
                  $result = array(1) { ["artikel"]=> array(1) { [222]=> array(3) { ["datum"]=> string(10) "20.02.2018" ["uhrzeit"]=> string(8) "21:54:56" ["EAN"]=> string(8) "xxxxxxxx" } } }
                  Code:
                  $json_erweitern = array(1) { ["artikel"]=> array(1) { [111]=> array(3) { ["datum"]=> string(10) "20.02.2018" ["uhrzeit"]=> string(8) "21:55:54" ["EAN"]=> string(8) "xxxxxxxx" } } }
                  daraus soll irgendwie …

                  Code:
                  array(1) { ["artikel"]=> array(2) { [111]=> array(3) { ["datum"]=> string(5) "test1" ["uhrzeit"]=> string(5) "test2" ["test"]=> string(8) "xxxxxxxx" } [222]=> array(3) { ["datum"]=> string(5) "test1" ["uhrzeit"]=> string(5) "test2" ["test"]=> string(8) "xxxxxxxx" } } }

                  Kommentar


                  • #10
                    Die Lösung haben bereits ChromOxid und ich gepostet. Was brauchst du noch mehr?

                    Kommentar


                    • #11
                      (Sarkasmus On) Natürlich, das ich das nicht schon früher gesehen habe. (Sarkasmus Off)

                      Sry, aber kannst du es nicht verstehen, das es Leute gibt, die nicht sofort die Lösung sehen.
                      Ich arbeite nicht jeden tag damit.
                      Und wie du meine Posts entnehmen kannst, verstehe ich es immer noch nicht.


                      Ich bin eigentlich schon fast selbst an mein Ziel gekommen... ABER....

                      PHP-Code:
                      $artikel json_decode('{"artikel":{"111":{"datum":"20.02.2018","uhrzeit":"23:52:43","test":"xxxxxxxx"}}}'true);

                      $artikel[222]['datum'] = 'test';
                      $artikel[222]['uhrzeit'] = 'test2';
                      $artikel[222]['test'] = 'xxxxxxxx';

                      $result = array ('artikel' => $artikel );

                      var_dump($result); 

                      Eine aller letzte frage dazu. Der neu so hinzugefügte eintrag rutscht eine ebene tiefer. Und dies bei jedem weiteren vorgenommenen Eintrag.

                      Code:
                      artikel    
                          111   
                              datum    "20.02.2018"
                              uhrzeit    "23:58:27"
                              test    "xxxxxxxx"
                          artikel    
                              222   
                                  datum    "20.02.2018"
                                  uhrzeit    "23:52:43"
                                  test    "xxxxxxxx"

                      Kommentar


                      • #12
                        In #4 steht 1:1 was du brauchst.

                        Scheint mir als hättest du dir nichtmal die Arbeit gemacht den dort geposteten Code auszuprobieren.

                        PHP-Code:
                        $artikel json_decode('{"artikel":{"111":{"datum":"20.02.2018","uhrzeit":"23:52:43","test":"xxxxxxxx"}}}'true);

                        $artikel['artikel'][222] = [
                            
                        'datum' => 211,
                            
                        'uhrzeit' => 222
                        ];

                        var_dump($artikel); 

                        Kommentar


                        • #13
                          Zitat von json Beitrag anzeigen
                          PHP-Code:
                          $result = array ('artikel' => $artikel ); 

                          Eine aller letzte frage dazu. Der neu so hinzugefügte eintrag rutscht eine ebene tiefer. Und dies bei jedem weiteren vorgenommenen Eintrag.
                          Was immer in dem JSON steht packst du ja wieder in einen Knoten "artikel" rein. Jedes mal.
                          [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

                          Kommentar


                          • #14
                            Hallo ChromOxid, hallo chorn,

                            In #4 steht 1:1 was du brauchst.

                            Scheint mir als hättest du dir nichtmal die Arbeit gemacht den dort geposteten Code auszuprobieren.
                            Nicht absichtlich, aber ich wusste nicht wie ich den hätte bei mir einbauen sollen. Gerade eben gemacht, es geht wirklich.
                            Sry, war keine Absicht. Vorallem habe ich mir dadurch selbst einiges mehr an Arbeit gemacht.



                            Was immer in dem JSON steht packst du ja wieder in einen Knoten "artikel" rein. Jedes mal.
                            Ich und arrays werden wohl nie freunde. Ich habe versucht diese zeile weg zu lassen/abzuwandeln. Keines hatte den gewünschten effekt.

                            Nun aber immehin endlich die Lösung.

                            Wirklich danke nochmals, allein hätte es sicherlich noch ein paar tage gedauert, bis sich irgendwie selbst auf dieses lösung gekommen wäre.

                            Viele Grüße

                            Kommentar

                            Lädt...
                            X