Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] JSON in PHP Variable umwandeln.

Einklappen

Neue Werbung 2019

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

  • [Erledigt] JSON in PHP Variable umwandeln.

    Hallo,

    ich bekomme von einen Server folgende Daten im JSON Format:
    Code:
    cname({
    	"version": 15,
    	"type": "get_list_sensors",
    	"sensor": [
    		{ 
    			"name": "WhSpuehl_5",
    			"type": "counter",
    			"value": 24930.0,
    			"utime": 1334769916,
    			"unit": ""
    		},
    		{ 
    			"name": "WhComputer_8",
    			"type": "counter",
    			"value": 8990.0,
    			"utime": 1334769892,
    			"unit": ""
    		},
    		{ 
    			"name": "WhMultimedia_6",
    			"type": "counter",
    			"value": 29468.0,
    			"utime": 1334769980,
    			"unit": ""
    		},
    		{ 
    			"name": "FS10_1_Temp",
    			"type": "temperature",
    			"value": 21.9,
    			"utime": 1334770039,
    			"unit": "°C"
    		},
    		{ 
    			"name": "FS10_1_LF",
    			"type": "hygrometer",
    			"value": 0.0,
    			"utime": 1334770039,
    			"unit": "%"
    		},
    		{ 
    			"name": "FS10_6_T_Bad",
    			"type": "temperature",
    			"value": 21.2,
    			"utime": 1334769956,
    			"unit": "°C"
    		},
    		{ 
    			"name": "FS10_7_Temp_IO",
    			"type": "temperature",
    			"value": -16.5,
    			"utime": 1334769776,
    			"unit": "°C"
    		},
    		{ 
    			"name": "FS10_5_Aussen",
    			"type": "temperature",
    			"value": 12.9,
    			"utime": 1334770010,
    			"unit": "°C"
    		},
    		{ 
    			"name": "FS10_4_T_WZ",
    			"type": "temperature",
    			"value": 23.2,
    			"utime": 1334770088,
    			"unit": "°C"
    		},
    		{ 
    			"name": "Luftdruck",
    			"type": "barometer",
    			"value": 985.0,
    			"utime": 1334769965,
    			"unit": "hPa"
    		},
    		{ 
    			"name": "FS10_6_F_Bad",
    			"type": "hygrometer",
    			"value": 42.8,
    			"utime": 1334769956,
    			"unit": "%"
    		},
    		{ 
    			"name": "FS10_4_F_WZ",
    			"type": "hygrometer",
    			"value": 34.7,
    			"utime": 1334770088,
    			"unit": "%"
    		},
    		{ 
    			"name": "FS10_ID_7_Temp",
    			"type": "temperature",
    			"value": 23.2,
    			"utime": 1334769965,
    			"unit": "°C"
    		},
    		{ 
    			"name": "FS10_7_Feuchte",
    			"type": "hygrometer",
    			"value": 31.2,
    			"utime": 1334769965,
    			"unit": "%"
    		},
    		{ 
    			"name": "FS10_3_Aussen2",
    			"type": "temperature",
    			"value": 12.6,
    			"utime": 1334770014,
    			"unit": "°C"
    		},
    		{ 
    			"name": "WhWaschmaschine_7",
    			"type": "counter",
    			"value": 783.0,
    			"utime": 1334769877,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_17",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_18",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_19",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_20",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_21",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_22",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_23",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_24",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_25",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_26",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_27",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_28",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_29",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_30",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_31",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_32",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_33",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_34",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_35",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_36",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_37",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_38",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_39",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_40",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_41",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_42",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_43",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_44",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_45",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_46",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_47",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_48",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_49",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_50",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_51",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_52",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_53",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_54",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_55",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_56",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_57",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_58",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_59",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_60",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_61",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_62",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_63",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		},
    		{ 
    			"name": "Sensor_64",
    			"type": "disabled",
    			"value": 0.0,
    			"utime": 0,
    			"unit": ""
    		}]
    })
    Mein PHP code sieht so aus:
    PHP-Code:
    <?
    $jsonfile = file_get_contents('http://192.168.0.242/control?callback=cname&cmd=get_list_sensors');
    $jsonarray = json_decode($jsonfile);
    print_r $jsonarray;
    ?>
    Leider funktioniert der Befehl json_decode nicht, als Ergebniss bekomme ich immer nur NULL.
    Kann mir da jemand weiter helfen?

    Schöne Grüße
    Thomas

  • #2
    Du bekommst auch kein JSON geliefert, sondern einen Javascript-Callbackcode (Funktion cname() ), der als Parameter das JSON-Objekt erhält.

    PHP-Code:
    cname( {foo'bar'} ); 

    Kommentar


    • #3
      Hallo,

      weiß dann jemand wie ich es anstelle an die Daten heran zu kommen.

      Schöne Grüße
      Thomas

      Kommentar


      • #4
        Du solltest dein JSON-Object erhalten, wenn du den Aufruf ohne die callback-option machst:
        PHP-Code:
        $jsonfile file_get_contents('http://192.168.0.242/control?cmd=get_list_sensors');
        $jsonarray json_decode($jsonfile);
        print_r $jsonarray
        LG jspit

        Kommentar


        • #5
          Nicht gleich wieder json_decode drauf abfeuern, sondern erstmal gucken, ob das so geht und ob was ankommt.

          Kommentar


          • #6
            Hallo,

            das geht wohl leider nicht, hier ein Zitat aus der Anleitung:
            callback : Der Variablen callback ist ein frei wählbarer Name (max. Länge 19 Zeichen)
            zuweisbar. Dieser spielt nur eine Rolle bei der Verwendung einer Callbackfunktion in
            JavaScript. Wird dieser Parameter weggelassen, bzw. nicht zugewiesen, wird kein JSON
            Antwortpaket geschickt.
            Schöne Grüße
            Thomas

            Kommentar


            • #7
              Dann musst DU den Namen halt wegschneiden. Ist ja nur ein String. Die abschließende Klammer auch.

              Kommentar


              • #8
                Zitat von ThDr Beitrag anzeigen
                Hallo,

                das geht wohl leider nicht, hier ein Zitat aus der Anleitung:


                Schöne Grüße
                Thomas
                Wenn du ihn weglassen kannst, und dort klar angegeben ist das er für JS Zwecke gedacht ist, und die API auch für PHP ausgelegt ist, dann sollte es wohl einen sauberen Weg geben das zu bewerkstelligen. Ich würde die Anleitung mal weiter durchforsten. Ansonsten halt wirklich von Hand "schnippeln".

                Bzw. hast du mal ausprobiert was denn kommt wenn du es ohne machst?

                Kommentar


                • #9
                  Zitat von Dark Guardian Beitrag anzeigen
                  Bzw. hast du mal ausprobiert was dnen kommt wenn du es ohne machst?
                  Dafür brauchst du das ja nur erstmal direkt im Browser einzugeben. Wenn ohne wirklich gar nichts kommt, dann schau dir mal trim an, damit kannst du dein string bequem stutzen.
                  Ja, und um ein Array zu erhalten, da wirf nochmal ein Blick auf das Manual von json_decode.

                  Kommentar


                  • #10
                    Oder einfach [MAN]substr[/MAN].

                    Kommentar


                    • #11
                      Hallo,

                      ich habe den Text jetzt immer weiter gekürzt und ausprobiert, als Ergebnis erhalte ich immer Null.
                      Als letztes hatte ich nur noch das im Textinhalt:
                      Code:
                      "name": "WhSpuehl_5",
                      "type": "counter",
                      "value": 24930.0,
                      "utime": 1334769916,
                      "unit": ""
                      Schöne Grüße
                      Thomas

                      Kommentar


                      • #12
                        Zeig mal wie du deinen Text gekürzt hast. Dein obiger Text ist weit entfernt von JSON. Du solltest nach der Stringmanipulation folgendes erhalten:
                        Code:
                        {
                        	"version": 15,
                        	"type": "get_list_sensors",
                        	"sensor": [
                                    :
                                    :
                                 "unit": ""
                        		}]
                        }

                        Kommentar


                        • #13
                          Hallo,

                          zum Testen habe ich den Text in eine Datei kopiert und diesen dann von Hand gekürzt, mein PHP Code sieht jetzt erst mal so aus:
                          PHP-Code:
                          <?
                          //$jsonfile = file_get_contents('http://192.168.0.242/control?callback=cname&cmd=get_list_sensors');
                          $jsonfile = file_get_contents("c:\\IP-Symcon\\html\\11.txt");
                          echo $jsonfile;
                          $jsonarray = json_decode($jsonfile);
                          //print_r ($jsonarray);
                          ?>
                          Schöne Grüße
                          Thomas

                          Kommentar


                          • #14
                            Hallo,

                            ich sehe da keinen Code der den String einkürzt. Du musst dir mit PHP den Stringteil holen der zwischen den () Klammern steckt. Das kannst du mit PHP String Funktionen tun oder aber mit einem kleinen Regex.

                            PHP-Code:
                            $cutString preg_match('~\((.*?)\)~i');
                            $json json_decode($cutStringtrue);

                            print_r($json); 
                            Ist ungetstet aber sollte funktionieren.

                            Gruß Litter

                            Kommentar


                            • #15
                              @Litter: Spielverderber ! Und so funktioniert es auch nicht.

                              Kommentar

                              Lädt...
                              X