2016-03-21 12 views
0

Ich habe eine JSON Antwort von einer API und ich kann kein Array von ihm mit "json_decode" in PHP erstellen, um dies als ein Array zu durchlaufen. Ich bekomme immer "NULL", wenn ich "var_dump" zum Ausdrucken verwende, was mein "json_decode" zurückgibt. Der Antwort-Header dieser API-Antwort ist "application/json", aber ich kenne dieses json-Format nicht.PHP - Wie kann ich diese JSON-Antwort durchlaufen?

Die json Antwort von der API wie folgt aussieht:

[1,"Example name","307","7","Test","455",1458572100000] 
[1,"Another example name","146","7","Test","455",1458571500000] 
[1,"Test","304","7","Test","455",1458572280000] 
[1,"Example name 3","163","7","Hello world","455",1458571080000] 

Dies ist das Ergebnis/Reaktion einer einzigen API-Anforderung ist. Jetzt möchte ich zum Beispiel die vorletzte Zahl (in diesem Fall jedes Mal 455) für jede Linie/jedes Objekt oder zum Beispiel den Namen (zweiter Wert: "Beispielname", "Ein anderer Beispielname", "Test" und bald). Wie kann ich das mit PHP und diesem JSON Format machen? Es wäre schön, wenn ich ein Array von diesem bekommen könnte, um durchzulaufen.

Es ist eine lokale Echtzeit-Bus Ankunft API, aber es ist ähnlich wie/die gleichen wie content.tfl.gov.uk/… und ich nenne diese API mit einem einfachen http/get Anfrage mit file_get_contents in PHP

"/interfaces/ura/instant_V1?returnList=stopID,stopPointName,LineID,DestinationT‌​ext,estimatedTime,vehicleID&vehicleID=455") 
+6

Sie haben alle 4 dieser Zeilen zurück von der API? dann ist das nicht gültig json. Es sind 4 separate JSON-Arrays, die zusammengehalten werden, was eine illegale Syntax für JSON ist. Sie müssten diese Zeichenfolge in den Zeilenumbrüchen auflösen und dann jede einzelne Zeile als separate JSON-Zeichenfolge dekodieren. –

+0

Ist das eine Antwort von der API oder 4 separate Antworten von 4 separaten Aufrufe an die API? – RiggsFolly

+0

Ja, alle 4 dieser Zeilen sind in einer einzigen Antwort von der API mit dem http-Header "application/json". Abhängig von meinen Anfrageparametern kann ich auch mehr als 4 Zeilen, manchmal 10, 50 oder sogar 500 dieser Zeilen innerhalb einer Antwort erhalten. –

Antwort

0

Um zu klären, ist die nicht JSON Format, das Sie zurück erhalten. Aber wenn das, was Sie bekommen dann brauchen Sie eine Lösung :)

Ich würde die erste & letzte Zeichen ignorieren und verwenden str_getcsv() das Komma getrennte Zeichenfolge als Array zurück:

$input = '[1,"Example name","307","7","Test","455",1458572100000]'; 
$array = str_getcsv(substr($input, 1, -1)); 

Wenn Sie multple Leitungen, dann sollten Sie sie in einzelne Zeilen aufgeteilt, bevor Sie die oben mit dabei:

$lines = explode($input, "]"); 
$array = array(); 
foreach($lines AS $line) { 
    $input = '[1,"Example name","307","7","Test","455",1458572100000]'; 
    $array[] = str_getcsv(substr($input, 1, -1)); 
} 

Aktualisiert delimeter von ] zu zeigen, statt \n wie im Kommentar unten.

+0

Vielen Dank für Ihre Antwort. Diese Methode funktioniert, aber mit "\ n" bekomme ich meine multiplen Zeilen (4) als eine Zeile und die PHP-Funktion "count" gibt auch "1" zurück, wenn ich sie auf $ lines laufe. Jedes "Element" in meiner API-Antwort hat eine eigene Zeile, aber unerklärlicherweise funktioniert "\ n" nicht für jede Zeile. –

+0

Jetzt habe ich das letzte Zeichen "]" als Delimeter verwendet und es funktioniert. Jetzt bekomme ich für jede Zeile ein Array. –

+0

Froh, dass es funktioniert. Aktualisierte Antwort mit dem unterschiedlichen Begrenzer, damit Sie die Antwort akzeptieren können (obwohl Ihr Beispiel zeigt, dass sie durch neue Zeilen getrennt sind?). – Egg

Verwandte Themen