Как разобрать Google Fit Json String с PHP - PullRequest
0 голосов
/ 07 января 2020

Пытаюсь разобрать ответ, полученный от GoogleFit API. Вот фрагмент кода, который я написал:

1 $result = curl_exec($ch);//execute post
2 curl_close($ch);//close connection 
3 $newResult = json_encode($result); 
4 Log::info($newResult); 
5 return $newResult;

И ответ выглядит так:

{ "access_token": "ya29.Il-4B1111", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "1//09uJO5Lo7CFhyCg3333", "scope": "https://www.googleapis.com/auth/fitness.activity.read https://www.googleapis.com/auth/fitness.location.read" } true

В строке 4 ведется логирование вместо ответа.

true

Я хочу сохранить access_token, refresh_token и expires_in в моем db. Я не могу получить доступ к свойствам ответа либо. Пожалуйста, помогите

Ответы [ 5 ]

1 голос
/ 07 января 2020

Некоторые API отвечают неверным JSON. Из соображений безопасности они добавляют логическое выражение (true или 1) после объекта JSON. Возможно, вам придется предварительно обработать ответ самостоятельно перед разбором.

1 голос
/ 07 января 2020

Вы можете декодировать / анализировать ответ JSON следующими способами:

  1. объект
  2. PHP ассоциативный массив

для второго варианта используйте true в json_decode()

, т.е. вы можете использовать следующее:

<?php
const NL = PHP_EOL;

$json = '{
    "access_token": "ya29.Il-4B1111",
    "token_type": "Bearer",
    "expires_in": 3600,
    "refresh_token": "1//09uJO5Lo7CFhyCg3333",
    "scope": "https://www.googleapis.com/auth/fitness.activity.read https://www.googleapis.com/auth/fitness.location.read"
}';

// object
$jsonObj = json_decode($json);
echo $jsonObj->access_token;
echo NL;
echo $jsonObj->refresh_token;
echo NL;
echo $jsonObj->expires_in;
echo NL;

// associative array
$jsonArr = json_decode($json, true);
echo $jsonArr['access_token'];
echo NL;
echo $jsonArr['refresh_token'];
echo NL;
echo $jsonArr['expires_in'];

рабочий демо

0 голосов
/ 13 января 2020

Спасибо всем, кто внес свой вклад в эту тему. Однако в Интернете я нашел библиотеку, которая облегчила мне задачу: Google API PHP Клиент

0 голосов
/ 07 января 2020
$url = 'YOUR API URL GOES HERE';

$cURL = curl_init();

curl_setopt($cURL, CURLOPT_URL, $url);
curl_setopt($cURL, CURLOPT_HTTPGET, true);

curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Accept: application/json'
));

$result = curl_exec($cURL);

curl_close($cURL);   

$json = json_decode($result, true);
print_r($json);

ВЫХОД

Array
(
    [access_token] => ya29.Il-4B1111
    [token_type] => Bearer
    //....
)

Теперь вы можете работать с переменной $json в виде массива:

echo $json['access_token'];
echo $json['token_type'];
0 голосов
/ 07 января 2020

Я предполагаю, что вы кодируете результат $ для своей регистрации. После этого вы можете использовать json_decode($newResult, true) - который в основном преобразует это в массив, и вы можете получить нужные вам значения.

https://www.php.net/manual/en/function.json-decode.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...