2016-03-21 61 views
0

我有一個來自API的json響應,我無法使用PHP中的「json_decode」來創建一個數組,以便將其作爲數組進行迭代。我總是會得到「NULL」,當我使用「var_dump」輸出時,我的「json_decode」返回。這個API響應的響應頭是「application/json」,但我不熟悉這種json格式。PHP - 我如何迭代這個json響應?

從API JSON響應看起來像這樣:

[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] 

這是一個單API請求的結果/響應。現在,例如,我想要得到每一行/對象的倒數第二個數字(在這種情況下每次都是455),或者,例如,名稱(第二個值:「示例名稱」,「另一個示例名稱」,「測試」和等等)。我怎樣才能做到這一點與PHP和這個JSON格式?這將是很好,如果我可以從這個數組迭代通過。

這是一個局部實時公交車到站API,但它類似於/一樣content.tfl.gov.uk/…,我把這個API與一個簡單的HTTP/PHP中得到使用file_get_contents要求

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

你從api中獲得了所有4行代碼?那麼這不是有效的json。它是4個單獨的json數組粘在一起,這是json的非法語法。你必須在換行符上展開這個字符串,然後將每個單獨的行解碼爲不同的json字符串。 –

+0

是從API的4個獨立響應還是從4個獨立的API對應的響應? – RiggsFolly

+0

是的,這些行中的所有4行都是來自帶有http頭「application/json」的api的單個響應。根據我的請求參數,我還可以在一個響應中得到超過4條線,有時甚至是10條,50條甚至500條線。 –

回答

0

爲了澄清,這不JSON格式,你回來了。但是,如果這是你在說什麼,那麼你需要一個解決方案:)

我會忽略第一個&最後一個字符用str_getcsv()以逗號分隔字符串返回一個數組:

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

如果你是有multple線,那麼你會希望做上述與前將其分割成各行:

$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)); 
} 

更新,以顯示]分隔符,而不是\n根據下面的評論。

+0

謝謝你的回答。此方法可行,但使用「\ n」時,我將多行(4)作爲一行,php函數「count」也返回「1」,當我在$行上運行它時。我的API響應中的每個「項目」都有它自己的行,但莫名其妙地「\ n」不適用於每行。 –

+0

現在我用最後一個字符「]」作爲分隔符,它可以工作。現在我得到每行一個數組。 –

+0

很高興它的工作。使用不同的分隔符更新答案,以便接受答案(儘管您的示例顯示它們以新行分隔?)。 – Egg