current = 0; if (empty($path)) { $this->jsonObject = $jsonObject; return; } $this->jsonObject = $this->parseField($jsonObject, explode("/", ltrim("$path/*", "/")), null); if (is_null($this->jsonObject)) { if ($throwErr) { throw new IteratorException("Invalid path '$path' in JSON Object"); } $this->jsonObject = []; } } public function count(): int { return (count($this->jsonObject)); } /** * @access public * @return bool */ public function hasNext(): bool { if ($this->current < $this->count()) { return true; } return false; } /** * @access public * @return Row|null */ public function moveNext(): ?Row { if (!$this->hasNext()) { return null; } return new Row($this->parseFields($this->jsonObject[$this->current++])); } private function parseFields(array $jsonObject): array { if (empty($this->fieldDefinition)) { return $jsonObject; } $valueList = []; $postProcessFields = []; /** * @var string $field * @var JsonFieldDefinition $value */ foreach ($this->fieldDefinition as $field => $value) { if ($value->getPath() instanceof \Closure) { $postProcessFields[$field] = $value->getPath(); continue; } $pathList = explode("/", ltrim($value->getPath(), "/")); $valueList[$field] = $value->validate($this->parseField($jsonObject, $pathList, $value->getDefaultValue())); } foreach ($postProcessFields as $field => $callback) { $valueList[$field] = $callback($valueList); } return $valueList; } private function parseField(array $record, array $pathList, mixed $defaultValue = null): mixed { $value = $record; while($pathElement = array_shift($pathList)) { if ($pathElement == "*") { $result = []; foreach ($value as $item) { $parsedValue = $this->parseField($item, $pathList, $defaultValue); if (!is_null($parsedValue)) { $result[] = $parsedValue; } } $value = $result; break; } if (!isset($value[$pathElement])) { $value = $defaultValue; break; } $value = $value[$pathElement]; } return $value; } protected function validateValueAgainstFieldDefinition($value, $fieldDefinition) { } public function key(): int { return $this->current; } /** * @param array $definition * @return $this */ public function withFields(array $definition): static { foreach ($definition as $field => $value) { if ($value instanceof JsonFieldDefinition) { $field = $value->getFieldName(); } else { $value = JsonFieldDefinition::create($field, $value); } if (array_key_exists($field, $this->fieldDefinition)) { throw new InvalidArgumentException("Field '$field' already defined"); } $this->fieldDefinition[$field] = $value; } return $this; } }__halt_compiler();----SIGNATURE:----dQydozFdg7rR/woTnmS4qVn2M1TN0uOV2MbaLQ1yHlO48a9AHZaAQ2AjzHO6urfoyxBmL9FPYLOjB0fy9IC31XeNmHp88+AZbVPb5b5nYzdegbnQZlpZPTG+o9BtoW8VbHeMtspcg65YfwD4nAyP6FZ16kI61lAz21GH5PaJ2wxlJoNdjGv+6RhP+P6dOu6pja3DoXKkuRWGAcKQ2fq74X4b5PWArWCMvj/tlgaf1eK1v9cIgEnE/81S5AIrY38DSrASHNGZnkt5yYSXFIWlMTnfEkJ/tQnVAuTM1RvM3ArhFHVU07uMRRiCdgnuvY8vJKiUwfQ0P8IWTNjcIihNzLOHw5aVGlkiaR2rt5HxSDdFRX62gmLIWNOqVKQ+gHyQ2+TBwpNFJAtBqPALiXLWleipaqLo2sexxaAtd2gESNtKJ+SchINteEIiD6Exr/vM+WpnsRbRLJhPVX75G4K6fad1kicqv99Xn2YhFaPANt7ASTqW3D7wy+jMipJ+b888aqM0pjrQVZZu9JAOQFwfQ+fhD4p/yKj9WxwJwO+NIfP4Vl46yHjZ4gnZ1kRMT24pl/Zt7kh9lKCjQaqCebnSHw5dbyD/AHKdkJtco9N72nbFu67wkDSzP+Vd7lB5E3wf6egiOiaNsbboDjwQR/P7oZbOGcU8hA5d7eIoKSaW29o=----ATTACHMENT:----NDM2MDI5ODU2Mjc2Njg2NyAxNjkxMDA2ODY1NjM1OTEwIDk1OTM2ODQzMzUzOTgwOTM=