JSON строка, возвращаемая с тестового сайта, включает дополнительные символы, мешающие работе json_decode - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь узнать о передаче данных между серверами. В строке есть тестовый API, содержащий данные json. Я пробовал следующее: -

    <?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": преамбула? Как это можно решить?

Ответы [ 3 ]

1 голос
/ 08 мая 2020

Ваша проблема в том, что вы пропустили второй параметр из функции 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-му свойству.

0 голосов
/ 12 мая 2020

Спасибо всем, кто предложил помощь. Я не понимал, что возвращенная строка приводит к двумерному массиву. Я был введен в заблуждение веб-сайтом, который дал мне ссылку на бесплатные тестовые данные.

0 голосов
/ 08 мая 2020

Вы можете получить к нему доступ так:

$character = json_decode($curl_data); 
echo $character->data[1]->employee_name; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...