2016-07-10 5 views
1

Ich habe versucht, dies für ein paar Tage durch Versuch und Irrtum etc, aber immer absolut nirgendwo. PHP ist nicht meine Stärke, aber ich fühle mich im Allgemeinen wohl damit, dass ich lernen kann, wie ich gehe, wenn ich bestimmte Dinge tun muss.Pull JSON API Ergebnisse von URL und Anzeige in PHP

Was ich versuche zu tun ist, nehmen Sie die API von einer Plattform, die verwendet wird, und geben Sie es in eine andere Plattform, die verwendet wird. Ich kann die Daten von der API leicht genug über eine URL erhalten, und es läuft gut auf einem anderen Server, so dass ich ziemlich sicher bin, dass alles auf der Seite der Dinge in Ordnung ist.

Das Problem ist, dass wenn es gelingt, es von einer URL zu bekommen, es sieht ziemlich chaotisch aus. Nichts, was ich bisher probiert habe, wird es als einen schönen sauberen Block darstellen. Darüber hinaus möchte ich in der Lage sein, bestimmte Daten aus dem Ergebnis zu ziehen und genau das anzuzeigen. Die Daten herauskommen wie folgt, wenn über die URL besucht (haben Werte für die Privatsphäre usw. geändert, aber die Integrität bleiben soll):

{ „Data“: [{ „DeviceID“: „1“, „Devicename“ : "Telefon 1", "Plattform": "Telefon OS", "Edition": "Deluxe", "Staat": "0", "Zeit": "2016-03-16T13: 47: 44 + 01: 00" }]}

im Grunde, was ich versuche zu tun:

  • Anzeige der Daten in einer Sperrliste, wie zu lange Linien im Gegensatz
  • Allo w Auswahl eines bestimmten Gerät durch „Gerätenamen“ und dann die entsprechenden
  • zu diesen Geräteinformationen anzuzeigen

Ich habe versucht, die folgenden Skripte bisher:

1:

<?php 
    $json = file_get_contents('URLHERE'); 
    $obj = json_decode($json); 
    echo $obj->DeviceID; 
?> 

2:

<?php 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_URL, 'URLHERE'); 
    $result = curl_exec($ch); 
    curl_close($ch); 

    $obj = json_decode($result); 
    echo $result->DeviceName; 
?> 

3:

<?php 
    $url = 'URLHERE'; 
    $obj = json_decode(file_get_contents($url), true); 
    echo $obj['DeviceID']; 
?> 

4:

<?php 
    $url = "URLHERE"; 
    $json = file_get_contents($url); 
    $json_data = json_decode($json, true); 
    echo "Device: ". $json_data["DeviceID"]; 
?> 

5:

<?php 
    $json = file_get_contents('URLHERE'); 
    $encodeJ = utf8_encode($json); 

    $obj = json_decode($encodeJ); 
    var_dump($obj-> DeviceID); 
?> 

Der vierte ist der nächstgelegene ich habe es geschafft, um es Daten zu erhalten Anzeigen dieser Methoden verwenden, sondern als alle Informationen bekomme ich nur "Gerät: NULL"

Jede Hilfe wäre willkommen. Ich ziehe mir die Haare aus!

UPDATE: geschafft haben einige Fortschritte bei der folgenden machen:

<?php 
$data = file_get_contents('URLHERE'); 

$response = json_decode($data, true); 

echo 'Device: ' . $response['Data']['0']['DeviceName']; 
echo 'Device: ' . $response['Data']['1']['DeviceName']; 

?> 

Dies wird die Gerätenamen aus dem Feld für Wert 0 und 1 Anzeige So, jetzt muss ich herausfinden, wie Iteriere durch das Array und zeige jedes in der Reihenfolge an, im Gegensatz zur harten Codierung jedes einzelnen.

Antwort

2

Ihre DeviceID ist in Data & es eine ist array so können Sie nicht direkt zugreifen. Wenn Sie

$data = json_decode('{"Data":[{"DeviceID":"1","DeviceName":"Phone 1","Platform":"Phone OS","Edition":"Deluxe","State":"0","Time":"2016-03-16T13:47:44+01:00"}]}', true);//I am using array so second parameter is true to easily demonstrate 

Ihre Struktur

[ 
    "Data" => [ 
     [ 
     "DeviceID" => "1", 
     "DeviceName" => "Phone 1", 
     "Platform" => "Phone OS", 
     "Edition" => "Deluxe", 
     "State" => "0", 
     "Time" => "2016-03-16T13:47:44+01:00", 
     ], 
    ], 
    ] 

ist also nur erste DeviceID zu erhalten, wenn Sie dann

$deviceID = isset($data['Data'][0]['DeviceID']) ? $data['Data'][0]['DeviceID'] : null; 

oder wenn Sie die DeviceIDs alle wollen dann

$deviceIds = []; 
    if (isset($data['Data']) && is_array($data['Data'])) 
    { 
     foreach ($data['Data'] as $row) 
     { 
      if (isset($row['DeviceID'])) 
      { 
       $deviceIds[] = $row['DeviceID']; 
      } 
     } 
    } 

oder Sie verwenden können array_columnwenn Ihre PHP-Version ist> = 5.5.0 oder PHP 7

$deviceIds = []; 
    if (isset($data['Data']) && is_array($data['Data'])) 
    { 
     $deviceIds = array_column($data['Data'], 'DeviceID'); 
    } 
1

Um die Daten zu erhalten, verwenden Sie:

$json = file_get_contents($url); 

Dann ist es in ein Array zu erhalten, wie:

$arr = json_decode($json, TRUE); 

um „Zeigen Sie die Daten in einer Sperrliste, wie zu lange Linien im Gegensatz“, zu verwenden:

foreach ($arr AS $element) { 
    foreach ($element AS $e) { 
    echo $e['DeviceName'] . '<br>'; 
    } 
} 

Um Gerätenamen „und dann die relevanten Informationen angezeigt werden zu diesem Gerät‚‘Auswahl eines bestimmten Geräts durch Zulassen“, Verwendung: Auswahl

$deviceName = "Phone 1"; // depending upon your use case, you'll need to decide how you want to set this variable; it's hard coded here for the sake of example 

foreach ($arr AS $element) { 
    foreach ($element AS $e) { 
    if ($e['DeviceName'] = $deviceName) { 
     echo '<pre>'; 
     print_r($e); 
     echo '</pre>';  
    } 
    } 
} 

Es ist zwar nicht ganz klar ist, was Sie unter „Zulassen von einem bestimmten Gerät über "Gerätename" ", ich bin geneigt zu glauben, dass Sie nach einer Möglichkeit suchen, einen Benutzer ein Gerät aus der Liste der Gerätenamen auswählen zu lassen. Das ist keine Aufgabe, die Sie mit PHP alleine bewältigen können. Sie müssen etwas für das Frontend in HTML oder Javascript erstellen, das mit Ihrem PHP am Backend interagiert.

+0

Dies ist sehr nützlich, ich kann es verwenden, um Informationen für alle Geräte anzuzeigen. Ich habe es leicht gemacht, und habe verwendet: '$ deviceName = $ arr ['Data'] ['0'] ['DeviceName'];' stattdessen. Mein Problem ist jetzt, dass, anstatt jedes sequentiell anzuzeigen, nur Array-Wert 0 auf jedem Gerät angezeigt wird. Jedes Gerät wird mit Informationen angezeigt, die für dieses Gerät spezifisch sind, abgesehen von dem Namen ist immer der Wert von Array space 0. Wie würde ich jeden in diesem Fall durchlaufen und die richtigen Namen anzeigen? –

+0

Es ist nicht ganz klar, was Sie unter "Auswahl eines bestimmten Geräts über Gerätename zulassen" verstehen: Ja, ich dachte mir, dass für diesen Teil ein JS benötigt wird. Ich werde daran arbeiten, sobald die Kernfunktionen funktionieren. Im Moment besteht die Hauptaufgabe meines Erachtens darin, alle vollständig aufgelistet zu bekommen und dann daran zu arbeiten, ein bestimmtes Gerät auszuwählen. –

+0

Ich habe meine Antwort auf den Teil "To" aktualisiert. Zeige die Daten in einer Blockliste an, im Gegensatz zu langen Zeilen. ", Use:", um zu reflektieren, was dein Kommentar deutlich macht. –