使用PHP从TFL api处理JSON响应?

时间:2016-04-08 15:46:43

标签: php json

我正在尝试从API获取以下JSON响应中的某些信息。这是actual API cal l。

c3

我想获取naptanId,行标识符和作为名称值对并打印它们。例如,

  • naptan:490009219W;
  • lineidentifer无论价值是什么
  • 朝向:“伊斯特姆或庄园”

请帮帮我,我是初学者, 提前谢谢

1 个答案:

答案 0 :(得分:0)

根据您的问题,您似乎只对返回的第一个place的值感兴趣,因此我会在答案中假设这一点。

将API中的数据转换为对象结构(与最初获得的JSON字符串相反):

$data = json_decode(file_get_contents('https://api.tfl.gov.uk/Place?lat=51.555504&lon=0.0592359&radius=200&includeChildren=False&type=NaptanPublicBusCoachTram&app_id=&app_key='), true);

获取naptanId

$naptanId = $data['places'][0]['naptanId'];

要获取lineIdentifier,我假设的是第一个lineGroup元素(不是lineModeGroups,但您可以根据需要进行更改):

$lineIdentifier = $data['places'][0]['lineGroup'][0]['lineIdentifier'];

此值为数组。

要使towards值更复杂,因为您需要根据子键过滤additionalProperties数组,然后取出value;再一次,我假设您只对第一个值感兴趣:

$towards = array_values(array_filter(
    $data['places'][0]['additionalProperties'], 
    function ($property) {
        return $property['key'] === 'Towards';
    }
))[0]['value'];

array_filter的调用会将additionalProperties元素拉出key === 'Towards'(请注意,这假设区分大小写,您可以添加strtolower并将字符串文字更改为{{ 1}}如果你想不区分大小写匹配)。调用'towards'是规范化数组索引所必需的。然后我们拉出第一个元素array_values并获取其[0]属性。

请注意,上述代码不会执行任何错误检查,例如,如果API调用未返回任何value,那么在您第一次执行places时,它将失败。如果你需要处理这些情况(你几乎肯定会这样做),那么你需要预先检查这些事情,例如:

$data['places'][0]