JSON auslesen

Moin,

ich bräuchte mal eure Hilfe … ich wollte gerade ne Idee umsetzen aber da klappt mal wieder was nicht :0D
Ich versuche gerade ne Route per Google API auszulesen.

$json_string = Sys_GetURLContent("https://maps.googleapis.com/maps/api/directions/json?origin=Hannover&destination=Rh%C3%BCden&key=xxxxxxxxxxxxxxxxxxxxxxxxxx");

Dann kommt folgendes in IPS an !

{
   "geocoded_waypoints" : [
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJuRMYfoNhsUcRoDrWe_I9JgQ",
         "types" : [ "locality", "political" ]
      },
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJAVkDPzdOqEcRcDteW0YgIQQ",
         "types" : [ "locality", "political" ]
      }
   ],
   "routes" : [
      {
         "bounds" : {
            "northeast" : {
               "lat" : 53.569287,
               "lng" : 13.4492786
            },
            "southwest" : {
               "lat" : 52.5200138,
               "lng" : 9.993683299999999
            }
         },
         "copyrights" : "Kartendaten © 2015 GeoBasis-DE/BKG (©2009), Google",
         "legs" : [
            {
               "distance" : {
                  "text" : "288 km",
                  "value" : 287796
               },
               "duration" : {
                  "text" : "2 Stunden, 56 Minuten",
                  "value" : 10587
               },

Was muss ich jetzt machen um z.B. die Reisezeit zu bekommen ?

$duration = $json_string->{'routes'}->{'legs'}->{'duration'}->{'text'};

Klappt nicht … ich kenne mich damit aber auch kaum aus :0D Sorry !

VG

Andreas

Zuerst den String (der enthält zwar Daten mit JSON, aber das weiß PHP ja nicht) überhaupt mal in ein Objekt oder Array wandeln.

Siehe PHP.net für json_decode($string) oder json_decode($string,true)
Ohne den zweiten Parameter bekommst du ein Objekt zurück.

Dies kannst du dann, so ähnlich wie du es schon hattest, abfragen.


$json = json_decode($json_string);  // $json_string in ein Objekt $json überführen.
var_dump($json->routes[0]->legs[0]->distance->text);  // 1. Route, 1. Objekt legs, Entferung, Text
var_dump($json->routes[0]->legs[0]->duration->text);  // 1. Route, 1. Objekt legs, Dauer, Text

Wenn du nicht weißt, welche Eigenschaften du im Objekt eigentlich wo findest, hilft auch immer ein var_dump vom ganzen Objekt.


var_dump($json); 

Michael

Danke !!! Das klappt ja super :0) Darf ich noch eine letzte Frage stellen …
Wie kann ich die Value (in dem Beispiel die Zeit) in eine Uhrzeit umwandeln ?
Will diese nämlich zur aktuellen Uhrzeit addieren, um so die arrival time zu bekommen.

Abend!

Bzgl. der Zeiten darf ich mal auf meinen Beitrag hier verlinken :slight_smile:
IP-Symcon - Wie kann ich… 2.0

Am besten nimmst du einen Zeitpunkt, z.B. jetzt, mit „time()“ und dann die 2 Stunden 56 Minuten in Sekunden „umbauen“ und dann kannst du schön damit rechnen und am Ende den Unix-Timestamp wieder mit z.B. „date(„H:i“, $timestampAnkunft)“ ausgeben als Ankunftszeit.

Edit: Du kannst auch eine „Startzeit“ eingeben und mit dieser dann rechnen. Geht einfach mit „strtotime“.

Grüße,
Chris

Moin,

das hätte ich hinbekommen sag ich jetzt einfach mal :0D Das Problem ist aber, wenn die Fahrt nur minuten dauert … dann werden die falschen Daten gezogen. Gibt es keine weg … ich glaube das ist JavaDate in „H:i“ umzuwandeln ?!

VG

Andreas

Was meinst du mit „wenn die Fahrt nur Minuten dauert, dann werden die falschen Daten gezogen“? :confused: Bitte etwas genauer beschreiben :slight_smile:

Oder meinst du, wenn da nicht „2 Stunden 56 Minuten“ steht, sondern nur „56 Minuten“ und du nimmst das dann als Stunden? Da könntest du mit „preg_match“ nachschauen, ob da Stunden und Minuten steht, oder nur Stunden, und dann entsprechend in Variablen stecken.

Grüße,
Chris

Richtig das meine ich :0) Na gut ich dachte es geht einfacher … also nur die value die ich habe umrechen zu lassen … dann probiere ich mal diesen Weg ;0)

Dankeschön !

Andreas

Man könnte auch mit „strlen“ prüfen, wie lang der String ist. Weil „Stunden Minuten“ ist defintiv länger als „Minuten“ :wink:

Grüße,
Chris

Ich habs :0D … Value sind ganz einfach die Sekunden … da denkt man einfach zu oft zu kompliziert … also kein UNIX Timestamp :0D

Danke dir … sobald das Teil fertig ist … stelle ich mein Script hier rein !

Einfach mit explode auf das Komma.
Zumindest hätte man dann auch gleich Tage mit erschlagen :wink:
Wenn er denn so lange reisen will :smiley:
Michael
Ups … den Rohwert hatte ich auch über sehen. Gibt es auch bei der Entfernung in m.

Hallo,

darf ich das Thema nochmal aufwärmen?
Als PHP- und JSON-Unkundiger kämpfe ich an zwei Fronten und wäre für Hilfe sehr dankbar.

Ich frage über JSON den tankerkoenig ab und bekomme den unten angezeigten decodierten String. Wie kann ich hieraus den Dieselpreis als Fließkommazahl extrahieren?

Viele Grüße
Volker

object(stdClass)#1 (4) {
  ["ok"]=>
  bool(true)
  ["license"]=>
  string(52) "CC BY 4.0 -  https://creativecommons.tankerkoenig.de"
  ["data"]=>
  string(5) "MTS-K"
  ["prices"]=>
  object(stdClass)#3 (1) {
    ["4b1144e3-1e10-4f6b-8802-5a0bd91556b7"]=>
    object(stdClass)#2 (4) {
      ["status"]=>
      string(4) "open"
      ["e5"]=>
      float(1,509)
      ["e10"]=>
      float(1,489)
      ["diesel"]=>
      float(1,329)
    }
  }
}

Ohne es jetzt genauer zu prüfen können:

  1. den Antwortstring json_decode

Könnte dann so aussehen:


$data = json_decode(„AntwortVariable“);
$diesel = (integer)$data->Diesel;
echo $diesel;

Wie gesagt, kann es von unterwegs nicht prüfen.

Gruß
Uli

Gesendet von iPhone mit Tapatalk

Danke für die schnelle Antwort, Uli!

Ich habe es jetzt so zusammengeraten und das funktioniert offenbar:

$json_string = Sys_GetURLContent("https://creativecommons.tankerkoenig.de/json/prices.php?ids=XXXX&apikey=XXX");
$json = json_decode($json_string);  // $json_string in ein Objekt $json überführen.
$aral='4b1144e3-1e10-4f6b-8802-xxxxxxxx';
$diesel_aral = $json->prices->$aral->diesel;
SetValue(31815, $diesel_aral);  // Wert in float-Variable schreiben

Viele Grüße
Volker