Ankündigung

Einklappen
Keine Ankündigung bisher.

In JSON-String suchen - wenn die einzelnen Keys nicht bekannt sind

Einklappen

Neue Werbung 2019

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

  • In JSON-String suchen - wenn die einzelnen Keys nicht bekannt sind

    Hallo zusammen,

    ich erforsche ja gerade die Welt der JSON-Strings

    Ich würde gerne eine kleine Helper-Methode schreiben, die mir hilft, einen JSON-String zu durchsuchen.


    Wichtig dabei: Es ist nicht bekannt, wie dieser JSON-String aufgebaut ist, bzw. der Aufbau wird erst durch die übergebenen Parameter deutlich.




    Wenn ich also einen JSON-String wie diesen habe:

    Code:
    {"name":["Tobias","Michael", "Torben"],"age":["18","17", "17"], "position":["Sturm", "Abwehr", "Torwart"]}

    soll die Funktion in der Lage sein, die Daten nach Wunsch zurückzugeben, beispielsweise:

    meinefunktion("Tobias", "age", "position") würde dann:

    18, Sturm

    zurück geben. Alle anderen Werte sollen nicht zurück gegeben werden.


    Ich wäre für Denkanstöße sehr dankbar

  • #2
    Ich wäre für Denkanstöße sehr dankbar
    Ja, benutz endlich ein sinnvolles Datenformat. JSON ist für Datenübergabe konzipiert, nicht um darin herumzuwerken. Nicht umsonst ist die Umsetzung in native Datenstrukturen in diversen Sprachen Sprachbestandteil.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      Hallo,

      leider suche ich mir das nicht aus - die Daten kommen aus einem Joomla-Repeatable-Field, welches in diesem Format speichert.

      Danke dennoch für Deine Antwort

      Kommentar


      • #4
        was haste denn schon angestellt mir json-parse.
        wie kann dein string aussehen, beliebig, also auch:
        Zitat von http://de.wikipedia.org/wiki/JavaScript_Object_Notation
        Code:
        {
          "Herausgeber": "Xema",
          "Nummer": "1234-5678-9012-3456",
          "Deckung": 2e+6,
          "Währung": "EURO",
          "Inhaber": {
            "Name": "Mustermann",
            "Vorname": "Max",
            "männlich": true,
            "Hobbys": [ "Reiten", "Golfen", "Lesen" ],
            "Alter": 42,
            "Kinder": [],
            "Partner": null
          }
        }

        Kommentar


        • #5
          Hallo moma,

          ich werde mir json-parse einmal anschauen. Das Problem ist leider, dass es hier nie Zuordnungen wie "Name" : "Tobias", "Alter":"18", ... gibt, sondern immer diese "Sortierung" vorliegt:

          Code:
          {"name":["Tobias","Michael", "Torben"],"age":["18","17", "17"], "position":["Sturm", "Abwehr", "Torwart"]}

          Kommentar


          • #6
            also du machst immer
            "string" => ["array"]
            sollte doch gehen.

            Kommentar


            • #7
              Im Großen und Ganzen sehr übersichtlich:
              1. json_decode() - Dabei auf Zeichensatz achten!
              2. Daten enthalten im resultierendem Array verarbeiten.


              PHP-Code:
              <?php

              $json 
              '{"name":["Tobias","Michael", "Torben"],"age":["18","17", "17"], "position":["Sturm", "Abwehr", "Torwart"]}';
              $data json_decode($jsontrue);
              echo 
              'Name: ' $data['name'][0] . ', Alter: ' $data['age'][0] . ', Position: ' $data['position'][0];

              Kommentar


              • #8
                Ja. Genau wie in den anderen 5 Threads zum gleichen Thema beschrieben.
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar


                • #9
                  Hallo,

                  ich finde des JSON String im Aufbau schon absolut daneben muss ich sagen. Da werden sinnlos JSON Arrays erzeugt.

                  Die Daten sollten zusammenhängender rein kommen.

                  Z.B. so.

                  Code:
                  [
                   	{
                   		"name" : "Paul",
                   		"age" : 24,
                   		"position" : "Sturm"
                   	},
                   	{
                   		"name" : "Franz",
                   		"age" : 19,
                   		"position" : "Mittelfeld"
                   	},
                   	{
                   		"name" : "Harry",
                   		"age" : 30,
                   		"position" : "Innenverteitiger"
                   	}
                  ]
                  Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                  [URL]http://www.lit-web.de[/URL]

                  Kommentar


                  • #10
                    Hallo zusammen,

                    vielen Dank für eure Hilfe.
                    Ich glaube, ich habe den Zusammenhang noch nicht ganz klar gemacht:

                    Die Funktion soll in der Lage sein, den gesamten JSON-String nach einem Wertepaar oder -triptett zu untersuchen. Ob nun $data['name'] überhaupt vorliegt, weiß die Funktion nicht.


                    Ich habe nun folgenden Ansatz:

                    Ich transponiere den JSON-String in ein "anständig" lesbares Array:


                    PHP-Code:
                                  $r = array(); 
                                  foreach(
                    $a as $keyRow => $subArr
                                  { 
                                      foreach(
                    $subArr as $keyCol => $value$r[$keyCol][$keyRow] = $value
                                      } 
                    Nun habe ich wenigstens einen JSON-String in der Form, wie litterauspirna ihn vorschlägt.

                    Dieses Array kann ich dann ja durchsuchen, indem ich Zeile für Zeile durchgehe und schaue, ob es ein Feld mit dem übergebenen "Key" gibt. Wenn ja: Welche Werte hier zugeordnet sind.
                    PHP-Code:
                    $t self::transposeArray($array);
                    foreach(
                    $t as $item)
                    {
                    if(
                    $item[$key]==$keyword) echo $item["type"].": ".$item["value"];

                    Würdet ihr hier anders vorgehen?



                    Zum Allgemeinen noch einmal: Ich bitte um Nachsicht - wie diese Forenkategorie schon besagt: Ich bin ein Anfänger in PHP-Fragen. Ich habe auch nicht selbst JSON als Format gewählt, mit dem ich mich gerne herumärgern würde.
                    Dennoch reizt mich die Herausforderung und ich freue mich immer über konstruktives Feedback.

                    Ich habe jetzt den Beitrag
                    Ja. Genau wie in den anderen 5 Threads zum gleichen Thema beschrieben.
                    als einen etwas genervten Beitrag verstanden. Ich kann mir vorstellen, dass es müßig ist, die selben Fragen immer wieder zu beantworten, allerdings ist es für einen Anfänger vielleicht nicht immer einfach zu sehen, dass die Frage schon beantwortet wurde, weil die gedanklichen Strukturen einfach noch fehlen.

                    Ich bitte hier also um Nachsicht. Ich versuche immer, so viel wie möglich selbst zu erarbeiten; wenn ich mich manchmal etwas blöd anstelle, dann mit Sicherheit nicht, um euch zu ärgern.


                    In diesem Sinne danke ich euch für eure Hilfe

                    Kommentar


                    • #11
                      meinefunktion("Tobias", "age", "position") würde dann:

                      18, Sturm
                      wieso denn nicht :
                      func("name", "Tobias", "position") und alles wäre einfacher;
                      dann ging wohl auch
                      func("position", "Mittelfeld", "age");

                      Kommentar


                      • #12
                        Nun habe ich wenigstens einen JSON-String in der Form, wie litterauspirna ihn vorschlägt.
                        Verwende doch einfach json_decode(), wenn du den JSON String bereits geliefert bekommst. Im Nachhinein einen JSON String nochmals umzubauen halte ich für den falschen Weg, es sei denn, dass der JSON String wirklich komplett daneben ist (Was hier ja nur teilweise der Fall ist).

                        Würdet ihr hier anders vorgehen?
                        Ja. Vergiss foreach und mach von Funktionen Gebrauch, die dir PHP bereits liefert: array_key_exists().

                        Kommentar


                        • #13
                          Okay, array_key_exists() scheint ja schon einmal ganz interessant zu sein.

                          Wenn ich nun also
                          PHP-Code:
                          if(array_key_exists($array) == true) {
                          //mach etwas

                          schreibe, müsste ich natürlich noch wissen, welche Werte hier zugeordnet sind. Gibt es die Möglichkeit, das ebenfalls ohne foreach zu erledigen?



                          Alternativ habe ich jetzt folgendes genutzt:

                          PHP-Code:
                                      $t self::transposeArray($array);


                                      
                          $n json_encode($t);
                                      
                          $obj json_decode($nfalse);
                                      
                                      
                          $count count($objCOUNT_RECURSIVE);
                                      for (
                          $i 0$i $count$i++) 
                                      {
                                          if(
                          $obj[$i]->type == $keyword)
                                          {
                                              
                          $new = new stdClass();
                                              
                          $new->type $obj[$i]->type;
                                              
                          $new->value $obj[$i]->value;
                                              
                          $new->unit $obj[$i]->unit;
                                      
                                          }
                                      
                                      }

                                      echo 
                          $new->type
                          Hier wird jetzt standardmäßig die "Spalte" "type" durchsucht. Ggf. kann ich das auch noch anpassen, dass automatisch erkannt wird, welche Eigenschaften hier vorhanden sind.


                          $new->value gibt jetzt hier für das gesuchte Keyword einen korrekten zugeordneten Wert aus.

                          Kommentar


                          • #14
                            array_intersect_key sollte zielführend sein.
                            [COLOR="#F5F5FF"]--[/COLOR]
                            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                            [COLOR="#F5F5FF"]
                            --[/COLOR]

                            Kommentar

                            Lädt...
                            X