从测试站点返回的 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:\wamp64\www\curlex\curlget.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":序言而失败?请问如何解决?


人到中年有点甜
浏览 67回答 3
3回答

动漫人物

你的问题是,你已经从函数中省略了第二个参数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 个属性。

郎朗坤

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

幕布斯6054654

您可以像这样访问它:$character = json_decode($curl_data);&nbsp;echo $character->data[1]->employee_name;&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP