json_encode ($ response); Как работать с Json API, распаковывать формат JSON с помощью Laravel - PullRequest
0 голосов
/ 13 апреля 2019

Я застрял с JSON.

Я могу получать данные через ответ API GET, используя Guzzle.

Я пытаюсь извлечь данные в ключ: формат значения с Laravel 5.7, чтобы сохранить его MySQL базы данных версии 5.55 (не понимает формат JSON)

и обработайте его лезвием, способным показать это как конечный пользователь.

 use GuzzleHttp\Psr7\Response;

/// Получение ответа ///

  $data = json_decode( (string) $response->getBody() );
  echo $response->getBody() ; 

Формат ответа JSON:

{
  "type": "fi.prh.opendata.bis",
  "version": "1",
  "totalResults": -1,
  "resultsFrom": 0,
  "previousResultsUri": null,
  "nextResultsUri": null,
  "exceptionNoticeUri": null,
  "results": [ // <- IN this part has company information
    {
      "businessId": "0856064-3",
      "name": "Company Ltd",
      "registrationDate": "1991-09-18",
      "companyForm": "Ltd",
      "detailsUri": null,
      "liquidations": [

      ],
      "names": [ // <- other array, which has history of Company names
        {
          "order": 0,
          "version": 1,
          "name": "Company Ltd",
          "registrationDate": "1991-08-14",
          "endDate": null,
          "source": 1
        }
      ]
    }
  ]
}

1) Пытался извлечь информацию о компании "результаты": из массива.

echo $response->getBody()->getContents([results]); 

Просто получаю ОШИБКУ: не существует Class App \ PRHData, что совпадает файл с кодом.

2) Пытался извлечь информацию о компании "результаты": из массива.

 foreach($data[result[0]]['businessId'] as $i => $v)
 {
 echo $v['businessId'].'<br/>';
 }

Я получаю ошибку:

 Use of undefined constant result - assumed 'result' (this will 
 throw an Error in a future version of PHP)

Я понятия не имею, что это за сообщение об ошибке.


use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request as GuzzleRequest;
use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Psr7;

class PRHData extends Model
{
public static function getJson()
{

/// Отправка запроса /// Эта часть работает, я получаю данные через API.

$client = new Client([
   'base_uri' => 'https://avoindata.prh.fi/bis/v1/',
   'defaults'=>[
     'timeout'  => 2.0,
     'cookies' => true,
     'headers'  => ['content-type' => 'application/json']]
  ]);
  $response = $client->request('GET','0856064-3'); //<- number is 
                             parameter for GET request to API call

/// Конец отправки запроса ///

/// Получение ответа ///

 $data = json_decode( (string) $response->getBody() ); // WORKS! 
 echo $response->getBody() ;   // Works !!!!

1) Я ищу способ получения информации в массиве "result" для ключа: формат значения как:

$VatId = $value['businessId'];
$Name = $value{'name'];
$RegDate = $value['registrationDate'];
$companyForm = $value['companyForm'];

и т. Д., Чтобы можно было их сохранить в дБ.

Вывод из ответа на данный момент:

"results": // <- IN this part has company information

[{"businessId":"0856064-3",

"name":"Company Ltd",

"registrationDate":"1991-09-18",

"companyForm":"Ltd",

Спасибо MikroMike

1 Ответ

0 голосов
/ 13 апреля 2019

Вы можете получить к нему доступ, используя результат вашего json_decode, который анализирует JSON в PHP объекты / массивы:

//...
$data = json_decode( (string) $response->getBody() );

$VatId = $data->results[0]->businessId;

Обратите внимание, что доступ к первой компании будет возможен только по индексу 0. Вы можете использовать цикл foreach для прохождения каждого результата:

//...
$data = json_decode( (string) $response->getBody() );

foreach ($data->results as $company) {
    $VatId = $company->businessId;
    // Do something with it in the iteration
}
...