Не удалось декодировать ошибку JSON при отправке данных в API с помощью Guzzle - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь обновить данные в API, используя Guzzle. И во время бега я встречаю эту ошибку Failed to decode json. Вот что я сделал:

$client = new Client([
        'headers' => [
            'Authorization' => 'Bearer ' . env('API_TOKEN'),
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ]
    ]);

    $api_link = env('KINGTIME_API');
    $updateAPIlink = $api_link . 'daily-schedules/' . $emp_key . '/' . $date;
    $response = $client->put(
        $updateAPIlink,
        json_decode(json_encode(['form_data' => $tobeUpdated])
    ), true);

Приведенный выше код возвращает ошибку Failed to decode JSON, и данные внутри моей переменной $tobeUpdated выглядят следующим образом:

array(8) {
        ["workPlaceDivisionCode"]=>
        string(7) "testeam"
        ["clockInSchedule"]=>
        string(0) "2019-01-01T19:00+09:00"
        ["clockOutSchedule"]=>
        string(0) "2019-01-01T19:00+09:00"
        ["workFixedStart"]=>
        string(22) "2019-01-01T08:00+09:00"
        ["workFixedEnd"]=>
        string(22) "2019-01-01T19:00+09:00"
    }

Когда я пытаюсь проверить в Почтальоне, он получает данные в следующем виде:

   {
        "workPlaceDivisionCode": "testeam",
        "clockInSchedule": "2019-01-01T09:00+09:00",
        "clockOutSchedule": "2019-01-01T18:00+09:00",
        "workFixedStart": "2019-01-01T08:00+09:00",
        "workFixedEnd": "2019-01-01T19:00+09:00"
    }

Ошибка в самом API или в моем фиде данных? Если в моем фиде данных, как я могу сделать дату, подобную формату, чтобы кормить, используя Почтальон? Я впервые работаю над API.

1 Ответ

0 голосов
/ 11 января 2019

Я думаю, вы поступили неправильно:

Попробуйте упростить этот раздел вашего кода:

$response = $client->put(
        $updateAPIlink,
        json_decode(json_encode(['form_data' => $tobeUpdated])
    ), true); //<--Was this "true" suppose to be part of your json_decode or a value to be added to the client?

К этому:

$response = $client->put(
  $updateAPIlink,
  array(
    'form_data' => $tobeUpdated
  )
); 

Данные, которые вы получаете от Почтальона, представлены в формате JSON. Вам нужно преобразовать строку JSON в объект или массив, и тогда вы сможете получить доступ к своим значениям.

Вот так:

<code>echo '<pre>';

$json = ' {

  "workPlaceDivisionCode": "testeam",
  "clockInSchedule": "2019-01-01T09:00+09:00",
  "clockOutSchedule": "2019-01-01T18:00+09:00",
  "workFixedStart": "2019-01-01T08:00+09:00",
  "workFixedEnd": "2019-01-01T19:00+09:00"

}';

//To get the data as an object:
$object = json_decode($json);

var_dump($object);
echo '<br>';

echo $object->clockInSchedule . '<br><br>';

//To get the data as an array us the "TRUE" flag:
$array = json_decode($json, true);

var_dump($array);
echo '<br>';

echo $array['clockInSchedule'] .'<br><br>';

echo '
';

Дайте мне знать, если это поможет.

...