protected function validValue(&$val)
    {
        if (!is_array($val)) {
            return $val == null || is_scalar($val) || $val instanceof JsonSerializable;
        }

        foreach ($val as $k => $v) {
            if (!$this->validValue($v)) {
                $val[$k] = null;
            } else {
                $val[$k] = $v;
            }
        }
        return true;
    }