如何解决API卷曲响应问题php
我无法处理Companies House API的回复。我正在从php页面发出以下curl请求:
$request_url_1 ='https://api.companieshouse.gov.uk/company/' ;
$company_number = 11495745;
$request_url_2 = '/officers';
$request_url = $request_url_1 . $company_number . $request_url_2;
$ch = curl_init($request_url);
$headers = array(
'Content-Type: application/json','Authorization: Basic '. base64_encode("$chkey:")
);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
$content = curl_exec($ch);
curl_close( $ch );
$contents = json_decode($content,true);
以下是发送curl请求后在php页面上“粘贴”的响应,我似乎无法获得应包含curl响应的$ contents变量的内容/值。
{
"active_count":1,"items_per_page":35,"kind":"officer-list","etag":"6cc48213158205c9fa85492a4c2ef0a98b56b2f1","resigned_count":2,"items":[
{
"date_of_birth":{
"year":1963,"month":2
},"appointed_on":"2019-08-01","nationality":"British","address":{
"address_line_1":"Moorside Crescent","country":"United Kingdom","address_line_2":"Sinfin","postal_code":"DE24 9PH","locality":"Derby","premises":"75"
},"occupation":"Company Director","links":{
"officer":{
"appointments":"/officers/IryiaaBZodlGNaOP0Rf3Pb2GnO8/appointments"
}
},"name":"MILLER,Eira","country_of_residence":"England","officer_role":"director"
},{
"date_of_birth":{
"month":3,"year":1987
},"nationality":"English","address":{
"locality":"Derby","address_line_1":"Moorside Crescent","premises":"75","address_line_2":"Sinfin"
},"appointed_on":"2018-12-10","resigned_on":"2019-07-31","name":"KING,Kimberley Rachel","links":{
"officer":{
"appointments":"/officers/av7G3-iF_9-FXhRH2xm-IxejeGQ/appointments"
}
},"country_of_residence":"United Kingdom",{
"address":{
"postal_code":"DE24 9PH","address_line_1":"Moorside Crescent"
},"occupation":"Managing Director","appointed_on":"2018-08-01","resigned_on":"2018-12-10","officer_role":"director","links":{
"officer":{
"appointments":"/officers/X9nlVD6qIIENMjaH946__4CB3QE/appointments"
}
},"name":"MARTIN,Katey","date_of_birth":{
"month":6,"year":1968
}
}
],"links":{
"self":"/company/11495745/officers"
},"inactive_count":0,"start_index":0,"total_results":3
}
我尝试将结果作为非关联数组返回并通过普通数组访问它,但那里也没有乐趣。
FluffyKitten提供了以下代码来执行名称字段的提取:
$item = $contents["items"];
foreach($item as $items){
echo $items["name"];
}
但是,这无法访问所需的数据。 $ contents的print_r结果为'1',并且var_dump(1)
解决方法
您的代码有几个问题:
- 您正在混淆用于访问数组和对象的代码
- 在不需要循环的情况下循环播放
您正在使用json_decode($content,true)
,并通过传递该true
参数将结果转换为关联数组,但随后尝试将items
作为对象的属性进行访问
由于已将内容转换为关联数组,因此可以使用正确的键轻松访问所需的信息,例如:
$item = $contents["items"];
foreach($item as $items){
echo "<p>".$items["name"];
}
参考 PHP json_decode
Documentation
更新:
您的问题已经完全改变-它是关于如何遍历变量与结果的关系,但是现在看来,问题首先是将结果另存为变量。
您需要将CURLOPT_RETURNTRANSFER
option设置为true
,以免直接输出结果(我想这就是您将结果“粘贴”到PHP页面中的意思)。
将此代码添加到您的CURL代码中,然后如果其余代码正确无误,则应将结果保存在$content
变量中,以便您可以使用它循环遍历上面的代码:
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。