Ankündigung

Einklappen
Keine Ankündigung bisher.

Json Objekt in Array konvertieren

Einklappen

Neue Werbung 2019

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

  • Json Objekt in Array konvertieren

    Servus,

    ich habe folgendes Problem:
    Ich bekomme von einem Webserver ein Json Objekt, das in etwa so ausschaut: {"4480":"79668923977418","65351":"40890403983808", "4482":"63916504035707","4484":"61259191666864","4 479":"44293267178165"}. Dies würde ich nun gerne in ein Array konvertieren. Das Problem bei json_decode ist ja, dass mein Array-index ja nun, bspw. die 4480 ist. Natürlich kenne ich diese Werte nicht, die im Json Objekt stehen. Wie kann ich nun das Json Objekt in ein Array mit einem Index (0 - 4) konvertieren? Habt ihr eine Idee?
    Da das Json Objekt nicht von mir ist, kann ich daran leider nichts ändern. Es müsste also in meiner Konvertierung entsprechend angepasst werden.

    Vielen lieben Dank-

    Gruß,

    Jonas

  • #2
    atürlich kenne ich diese Werte nicht,
    Du kannst foreach() nutzen, oder sowas:

    PHP-Code:
    $s '{
       "4480":"79668923977418",
       "65351":"40890403983808",
       "4482":"63916504035707",
       "4484":"61259191666864",
       "4 479":"44293267178165"
    }'
    ;

    $a json_decode($strue);
    print_rarray_values($a) );
    /*
    Array
    (
        [0] => 79668923977418
        [1] => 40890403983808
        [2] => 63916504035707
        [3] => 61259191666864
        [4] => 44293267178165
    )
    */ 

    Kommentar


    • #3
      hausl Wenn ich mir denn Wert von a, also bspw. a[0] ausgeben lassen will, bekomme ich: Notice: Undefined offset: 0

      Des weiteren benötige ich auch den Wert an 1. Stelle, also bspw. die 4480.

      Vielen Dank für deine Antwort übrigens

      Kommentar


      • #4
        Zitat von GhostGCR Beitrag anzeigen
        hausl Wenn ich mir denn Wert von a, also bspw. a[0] ausgeben lassen will, bekomme ich: Notice: Undefined offset: 0
        Naja... Zuweisen musst du es schon auch.. ich gebs oben ja nur aus...

        PHP-Code:
        $a array_valuesjson_decode($strue) );

        echo 
        $a[0]; 79668923977418 
        Des weiteren benötige ich auch den Wert an 1. Stelle, also bspw. die 4480.
        Versteh ich nicht. Du schreibst:

        ein Array mit einem Index (0 - 4) konvertieren?

        Kommentar


        • #5
          Sowas?

          PHP-Code:
          <?php

          $s 
          '{
             "4480":"79668923977418",
             "6535":"40890403983808",
             "4482":"63916504035707",
             "4484":"61259191666864",
             "4479":"44293267178165"
          }'
          ;

          $a json_decode($strue);

          $aOut = [];

          foreach (
          $a as $key => $value) {
              
          $aOut[] = [$key => $value];
          }


          print_r($aOut);

          /*
          Array
          (
              [0] => Array
                  (
                      [4480] => 79668923977418
                  )

              [1] => Array
                  (
                      [6535] => 40890403983808
                  )

              [2] => Array
                  (
                      [4482] => 63916504035707
                  )

              [3] => Array
                  (
                      [4484] => 61259191666864
                  )

              [4] => Array
                  (
                      [4479] => 44293267178165
                  )

          )

          */

          Kommentar


          • #6
            hausl praktisch ein dreidimensionales array. Also [index][erster_wert][zweiter_wert]. [0][4480][796schlag mich tot]. Weißt du, was ich meine?

            Kommentar


            • #7
              Die Sache bei JSON ist, dass Objektattribute keine Reihenfolge haben. Ja sicher, im JSON-String gibt es eine Reihenfolge von Anfang- bis Endposition, aber diese ist quasi zufällig. Also irgendwie klingt für mich das Grundkonzept schon falsch, weil es auf etwas aufbauen will, das so gar nicht existiert.

              Du solltest besser erklären, was du eigentlich erreichen willst, und nicht welche technischen Details du dir ausgedacht hast, die womöglich ein komplett falschen Ansatz darstellen.

              Kommentar


              • #8
                hellbringer Ich habe die Geräte mit den IDs (bspw. die 4480), und den Datenverkehr in Bytes, der über diese geroutet wird (7966892397741. Die Top 5 dieser Geräte werden in einer JSON Datei auf einem Server bereitgestellt, auf den ich per Socket zugreife. Ich soll/möchte diese Datei nun abrufen und eine Liste dieser Top 5 für jeden Tag machen (die JSON Datei wird täglich neu generiert).

                Mein Gedanke war nun, mit json_decode diese Datei in ein drei-dimensionales array zu verwandeln, also $arr[][][].

                Kommentar


                • #9
                  Für mich ist das von der Anforderung her eine Liste von Einträgen, die jeweils Infos zu einem Gerät enthalten.

                  Auf hausls Code aufbauend:

                  PHP-Code:
                  <?php

                  $s 
                  '{
                     "4480":"79668923977418",
                     "6535":"40890403983808",
                     "4482":"63916504035707",
                     "4484":"61259191666864",
                     "4479":"44293267178165"
                  }'
                  ;

                  $a json_decode($strue);

                  $aOut = [];

                  foreach (
                  $a as $key => $value) {
                      
                  $aOut[] = [
                          
                  'device_id'    => $key,
                          
                  'bytes_routed' => $value
                      
                  ];
                  }

                  var_dump($aOut);
                  Code:
                  array(5) {
                    [0]=>
                    array(2) {
                      ["device_id"]=>
                      int(4480)
                      ["bytes_routed"]=>
                      string(14) "79668923977418"
                    }
                    [1]=>
                    array(2) {
                      ["device_id"]=>
                      int(6535)
                      ["bytes_routed"]=>
                      string(14) "40890403983808"
                    }
                    [2]=>
                    array(2) {
                      ["device_id"]=>
                      int(4482)
                      ["bytes_routed"]=>
                      string(14) "63916504035707"
                    }
                    [3]=>
                    array(2) {
                      ["device_id"]=>
                      int(4484)
                      ["bytes_routed"]=>
                      string(14) "61259191666864"
                    }
                    [4]=>
                    array(2) {
                      ["device_id"]=>
                      int(4479)
                      ["bytes_routed"]=>
                      string(14) "44293267178165"
                    }
                  }
                  Bei einem 3D-Array wüsste ich unter anderem nicht, was letztlich der Wert eines Eintrags sein sollte.

                  Kommentar


                  • #10
                    Zitat von GhostGCR Beitrag anzeigen
                    hellbringer Ich habe die Geräte mit den IDs (bspw. die 4480), und den Datenverkehr in Bytes, der über diese geroutet wird (7966892397741. Die Top 5 dieser Geräte werden in einer JSON Datei auf einem Server bereitgestellt, auf den ich per Socket zugreife. Ich soll/möchte diese Datei nun abrufen und eine Liste dieser Top 5 für jeden Tag machen (die JSON Datei wird täglich neu generiert).
                    Dann ist aber schon die Software am Server kaputt. Den sie stellt keine Liste der Top 5 Einträge bereit, sondern ein Objekt mit 5 Attributen. Also der Fehler gilt dort zu fixen.

                    Kommentar


                    • #11
                      hellbringer Ich hab auch nicht geasgt, das die JSON Datei eine Liste ist, sondern dass ich daraus gerne eine Liste machen würde.

                      Habs jetzt hinbekommen:

                      PHP-Code:
                      $a json_decode($strue);
                           
                      $aOut = [];
                           foreach (
                      $a as $key => $value)
                           {
                                
                      $sql "SELECT nt_name FROM devices WHERE id = ?";
                                
                      $stmt $mysqli->prepare($sql);
                                
                      $stmt->bind_param("i"$key);
                                
                      $stmt->execute();
                                
                      $result $stmt->get_result();

                                while(
                      $row $result->fetch_assoc())
                                {
                                     
                      $nt_name $row['nt_name'];
                                }
                                
                      $aOut[] = [
                                     
                      'device_id'    => $nt_name,
                                     
                      'bytes'        => $value
                                
                      ];
                           } 
                      Vielen Lieben Dank für eure Hilfen ^-^ Wünsche euch ein tolles Wochenende.

                      Kommentar


                      • #12
                        Du wendest das prepared statement ungeschickt an.

                        Dieser Ausdruck
                        PHP-Code:
                        $sql "SELECT nt_name FROM devices WHERE id = ?";
                                  
                        $stmt $mysqli->prepare($sql); 
                        gehört vor die Foreach Schleife!
                        Mehr dazu steht im Handbuch.

                        Kommentar

                        Lädt...
                        X