从测试站点返回的JSON字符串包含阻止JSON_decode工作的额外字符



我正在学习如何在服务器之间传输数据。在线有一个包含json数据的测试API。我尝试了以下方法:-

<?php
// Initiate curl session in a variable (resource) $curl_handle = curl_init();
$url = "http://dummy.restapiexample.com/api/v1/employees"; // website sample API data
// Set the curl URL option curl_setopt($curl_handle, CURLOPT_URL, $url);
// This option will return data as a string instead of direct output curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
// Execute curl & store data in a variable $curl_data = curl_exec($curl_handle);
curl_close($curl_handle);
// Write the JSON string
// echo $curl_data; // the above writes the JSON string ok
// Now try decoding to PHP array
$character = json_decode($curl_data); 
echo $character[1]->employee_name; 
// this throws an error 'Error: Cannot use object of type stdClass as array in C:wamp64wwwcurlexcurlget.php on line 24' 
?>

返回的字符串包含以下内容(为了清晰起见,将其精简为2个条目(:-

{"status":"success","data":[{"id":"1","employee_name":"Tiger Nixon","employee_salary":"320800","employee_age":"61","profile_image":""},{"id":"2","employee_name":"Garrett Winters","employee_salary":"170750","employee_age":"63","profile_image":""}]}

我想json_decode会因为{"status":"success","data":前导码而失败吗?请问如何解决?

您的问题是,您已经提交了json_decode()函数的第二个参数,如果不设置该参数,它将把字符串解析为对象,而不是数组。

你可以在这里找到这个函数的文档,在你的案例中你要找的是assoc参数。

另一方面,您显示的示例在另一个属性中返回所寻求的employee_name,而不是在主属性(即data(中。

尝试提供true作为函数的第二个参数:

$character = json_decode($curl_data, true);
echo $character[1]['employee_name'];

但只有在数据示例不准确的情况下,这才会奏效。如果该示例是准确的,要获得第二个数据元素的employee_name,请使用:

$character = json_decode($curl_data, true);
echo $character['data'][1]['employee_name'];

注意,php数组是基于零的,所以如果你想从数组中获得第一个元素,你应该引用它的第0个属性。

您可以这样访问它:

$character = json_decode($curl_data); 
echo $character->data[1]->employee_name; 

感谢所有提供帮助的人。我没有意识到返回的字符串会产生一个二维数组。我被网站误导了,该网站给了我免费提供的测试数据的链接。

最新更新