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:----R6r1nGuKIE9ecHYNZtwmUyM5srgtQletEEZPfqoUt/3Qi/zPHWCw8nR40Ql4RKj+6eykJf/rCZmIUcwQvthBvVA31uFFVKDc4X0xnNN0LhxCM7jANa+QXeLpjhngjxvZnmj/zgoK6RdyqcBhkydOLoPd2QsVTq0dS3eGjpCOrLbY2ouQ8JwhIDv2cv91H5VZkK6Ew4toGQEVUmAedmqVBS+n5Ac7YKov5ZtPsm6udCiyLyj4rhR10wNzyY00Tjwl++Q6hbu9TqnHfXl7wkLWrUPPFNsHJmzWfUkiihaWQeXu6CGs3vsjMar6k/ZOCFXGcUN3DiboNWbf9P8XaEDi/lYqHt87/xdCcldvLFJheOW/wXiEHmxDGHU4aAqyIIzce1YuxGhk+3yNhEuy8nt1RieQMNi7qEVsZmyKC68YuMvhlZE0OZ+8DISKYv6WIGsfGszb85Jan1xw6zxwkk2f/7guK2VzysyZXZSvVDxVlFDb0iVl6VXWS4xZT2uqxFZ8hAwEpMbpI4NSj3SkZdCvHvvoRAdiiJE9kA9kDCg+QJAPZsBG6PR2ITKFgupQ3pfDUyU/GCgNYdozWVf7M7IwGrfSPfrnuX5eorugqgllLKEBdYSWJC0CY2mAPUl7u4B9t9XpKu2KGDViy4q+azgRir09IaPfm6ptahnk2MEHR/k=----ATTACHMENT:----Njc3MDM5MTQ2MTI0MjM0MiA5OTcyODgyODIzNDQ1NTY5IDIzMTcyNzQ3NzQzMjg1MDQ=