You are here

protected function Json::getSourceData in Migrate Plus 8.3

Same name and namespace in other branches
  1. 8.5 src/Plugin/migrate_plus/data_parser/Json.php \Drupal\migrate_plus\Plugin\migrate_plus\data_parser\Json::getSourceData()
  2. 8 src/Plugin/migrate_plus/data_parser/Json.php \Drupal\migrate_plus\Plugin\migrate_plus\data_parser\Json::getSourceData()
  3. 8.2 src/Plugin/migrate_plus/data_parser/Json.php \Drupal\migrate_plus\Plugin\migrate_plus\data_parser\Json::getSourceData()
  4. 8.4 src/Plugin/migrate_plus/data_parser/Json.php \Drupal\migrate_plus\Plugin\migrate_plus\data_parser\Json::getSourceData()

Retrieves the JSON data and returns it as an array.

Parameters

string $url: URL of a JSON feed.

Return value

array The selected data to be iterated.

Throws

\GuzzleHttp\Exception\RequestException

1 call to Json::getSourceData()
Json::openSourceUrl in src/Plugin/migrate_plus/data_parser/Json.php
Opens the specified URL.

File

src/Plugin/migrate_plus/data_parser/Json.php, line 43

Class

Json
Obtain JSON data for migration.

Namespace

Drupal\migrate_plus\Plugin\migrate_plus\data_parser

Code

protected function getSourceData($url) {
  $response = $this
    ->getDataFetcherPlugin()
    ->getResponseContent($url);

  // Convert objects to associative arrays.
  $source_data = json_decode($response, TRUE);

  // If json_decode() has returned NULL, it might be that the data isn't
  // valid utf8 - see http://php.net/manual/en/function.json-decode.php#86997.
  if (is_null($source_data)) {
    $utf8response = utf8_encode($response);
    $source_data = json_decode($utf8response);
  }

  // Backwards-compatibility for depth selection.
  if (is_int($this->itemSelector)) {
    return $this
      ->selectByDepth($source_data);
  }

  // Otherwise, we're using xpath-like selectors.
  $selectors = explode('/', trim($this->itemSelector, '/'));
  foreach ($selectors as $selector) {
    if (!empty($selector)) {
      $source_data = $source_data[$selector];
    }
  }
  return $source_data;
}