Json.php in Migrate Plus 8.5
File
src/Plugin/migrate_plus/data_parser/Json.php
View source
<?php
namespace Drupal\migrate_plus\Plugin\migrate_plus\data_parser;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\migrate_plus\DataParserPluginBase;
class Json extends DataParserPluginBase implements ContainerFactoryPluginInterface {
protected $iterator;
protected function getSourceData($url) {
$response = $this
->getDataFetcherPlugin()
->getResponseContent($url);
$source_data = json_decode($response, TRUE);
if (is_null($source_data)) {
$utf8response = utf8_encode($response);
$source_data = json_decode($utf8response, TRUE);
}
if (is_int($this->itemSelector)) {
return $this
->selectByDepth($source_data);
}
$selectors = explode('/', trim($this->itemSelector, '/'));
foreach ($selectors as $selector) {
if (!empty($selector) || $selector === '0') {
$source_data = $source_data[$selector];
}
}
return $source_data;
}
protected function selectByDepth(array $raw_data) {
$iterator = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($raw_data), \RecursiveIteratorIterator::SELF_FIRST);
$items = [];
$identifierDepth = $this->itemSelector;
$iterator
->rewind();
while ($iterator
->valid()) {
$item = $iterator
->current();
if (is_array($item) && $iterator
->getDepth() == $identifierDepth) {
$items[] = $item;
}
$iterator
->next();
}
return $items;
}
protected function openSourceUrl($url) {
$source_data = $this
->getSourceData($url);
$this->iterator = new \ArrayIterator($source_data);
return TRUE;
}
protected function fetchNextRow() {
$current = $this->iterator
->current();
if ($current) {
foreach ($this
->fieldSelectors() as $field_name => $selector) {
$field_data = $current;
$field_selectors = explode('/', trim($selector, '/'));
foreach ($field_selectors as $field_selector) {
if (is_array($field_data) && array_key_exists($field_selector, $field_data)) {
$field_data = $field_data[$field_selector];
}
else {
$field_data = '';
}
}
$this->currentItem[$field_name] = $field_data;
}
if (!empty($this->configuration['include_raw_data'])) {
$this->currentItem['raw'] = $current;
}
$this->iterator
->next();
}
}
}
Classes
Name |
Description |
Json |
Obtain JSON data for migration. |