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:----HWacPfjrURBwCpVFEmCZNmjxqFn/l5W3k0RY+P7VP7Xe4ELTrbr+QhqAepDNtTtavCuIu7FdAhJj4wny4AlB2Pa7DViHv8KJD2Bilqzf7iizHRTon5E/DndYsy6VEsZM11Nk+70BoXK9hkfKqUElwzAUBfBb8hHTA3WIWauvsx/O70n2eZ8hI5V36HEZYVRhbJVUHGDDPuvwGvKbiUgDy6nnvm4TBbxbPGd8Yfrc/FGsweRNHdAdvFiYL7u8x16ujD1r97LMI/EDs7aD3jOs5KYPsv19hWXoge0lTPDbqe7kA1McD0byA4fzCRGQ9omTFwvMgjsJQk/cwsSaE7a1sd3maF3cXZ/LPDzixizivWiMqO2/lECjUCKret+kgvtzGfBjmf0BSjpoJeLS5REvuQesh+a8uXP6qlK2K4TP8DKZAlFZTxPNd7yfQ2IJfIYfdDhY96m2wWl13S/1pbgRl3AhFUgCwQOPhERI7mGH3ooQ4Fu3TTTVqNbvk0Bzmfx2MHo8kc/Ld3GhnA0jPlHHBPhMDNLaqIQivNMReRA+AM5jZ+n2MBYnwn4HRToAGN8blu8mEMjx5Doivhkrz4R0P7YPFOZinc1wnMmtYdy69Vhhy+rxVeWEds1oMml7b1Z4UjwbsC5E+MMTusdvOCXLo8QLewSfvMB74ErnPJxet0k=----ATTACHMENT:----MTkzNzUxNDIyOTc2OTkwNSA3Mjk5ODc2NzYxMTE5MzQzIDQyMTQ0NTEyOTE4Njk2Mzk=