2016-03-21 78 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