oldschema->getColumns()); $input = json_decode($json, true); if ($input === null) { switch (json_last_error()) { case JSON_ERROR_NONE: $error = 'No errors'; break; case JSON_ERROR_DEPTH: $error = 'Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: $error = 'Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: $error = 'Unexpected control character found'; break; case JSON_ERROR_SYNTAX: $error = 'Syntax error, malformed JSON'; break; case JSON_ERROR_UTF8: $error = 'Malformed UTF-8 characters, possibly incorrectly encoded'; break; default: $error = 'Unknown error'; break; } throw new StructException('JSON couldn\'t be decoded: ' . $error); } $config = $input['config'] ?? []; $data = ['config' => json_encode($config), 'cols' => [], 'new' => []]; foreach ($input['columns'] as $column) { // config has to stay json $column['config'] = json_encode($column['config'], JSON_PRETTY_PRINT); if (!empty($column['colref']) && $column['colref'] <= $existing) { // update existing column $data['cols'][$column['colref']] = $column; } else { // add new column $data['new'][] = $column; } } $this->data = $data; } }