---
name: "JSON::Validator::Joi"
section: "3pm"
platform: "linux"
package: "libjson-validator-perl"
version: "5.15+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/JSON::Validator::Joi"
---

# JSON::Validator::Joi(3pm)

Joi validation sugar for JSON::Validator

## NAME

JSON::Validator::Joi - Joi validation sugar for JSON::Validator

## SYNOPSIS

```
  use JSON::Validator::Joi "joi";
  my @errors = joi->object->props(
    age   => joi->integer->min(0)->max(200),
    email => joi->regex(".@.")->required,
    name  => joi->string->min(1),
  )->validate({
    name  => "Jan Henning",
    age   => 34,
    email => "jhthorsen@cpan.org",
  });
  die "@errors" if @errors;
```

### EXPORTED FUNCTIONS

### joi

```
  $joi = joi(%attrs);
```

Same as:

```
  JSON::Validator::Joi->new(%attrs);
```

## DESCRIPTION

JSON::Validator::Joi is an elegant DSL schema-builder. The main purpose is to build a JSON Schema \<https://json-schema.org/\> for JSON::Validator, but it can also validate data directly with sane defaults.

## ATTRIBUTES

### enum

```
  my $joi       = $joi->enum(["foo", "bar"]);
  my $array_ref = $joi->enum;
```

Defines a list of enum values for "integer", "number" and "string".

### format

```
  my $joi = $joi->format("email");
  my $str = $joi->format;
```

Used to set the format of the "string". See also "iso\_date", "email" and "uri".

### max

```
  my $joi = $joi->max(10);
  my $int = $joi->max;
```

- •

  array

  Defines the max number of items in the array.

- •

  integer, number

  Defined the max value.

- •

  object

  Defines the max number of items in the object.

- •

  string

  Defines how long the string can be.

### min

```
  my $joi = $joi->min(10);
  my $int = $joi->min;
```

- •

  array

  Defines the minimum number of items in the array.

- •

  integer, number

  Defined the minimum value.

- •

  object

  Defines the minimum number of items in the object.

- •

  string

  Defines how short the string can be.

### multiple\_of

```
  my $joi = $joi->multiple_of(3);
  my $int = $joi->multiple_of;
```

Used by "integer" and "number" to define what the number must be a multiple of.

### regex

```
  my $joi = $joi->regex("^\w+$");
  my $str = $joi->regex;
```

Defines a pattern that "string" will be validated against.

### type

```
  my $joi = $joi->type("string");
  my $joi = $joi->type([qw(null integer)]);
  my $any = $joi->type;
```

Sets the required type. This attribute is set by the convenience methods "array", "integer", "object" and "string", but can be set manually if you need to check against a list of type.

### validator

```
  my $joi = $joi->validator(JSON::Validator::Schema::Draft7->new);
  my $jv  = $joi->validator;
```

Defaults to a JSON::Validator object. This object is used by "validate".

Note: This might change to JSON::Validator::Schema::Draft7 or a later schema in the future.

## METHODS

### TO\_JSON

Alias for "compile".

### alphanum

```
  my $joi = $joi->alphanum;
```

Sets "regex" to "^\\w\*$".

### array

```
  my $joi = $joi->array;
```

Sets "type" to "array".

### boolean

```
  my $joi = $joi->boolean;
```

Sets "type" to "boolean".

### compile

```
  my $hash_ref = $joi->compile;
```

Will convert this object into a JSON-Schema data structure that "schema" in JSON::Validator understands.

### date\_time

```
  my $joi = $joi->date_time;
```

Sets "format" to date-time.

### email

```
  my $joi = $joi->email;
```

Sets "format" to email.

### extend

```
  my $new_joi = $joi->extend($other_joi_object);
```

Will extend `$joi` with the definitions in `$other_joi_object` and return a new object.

### iso\_date

Alias for "date\_time".

### integer

```
  my $joi = $joi->integer;
```

Sets "type" to "integer".

### items

```
  my $joi = $joi->items($joi);
  my $joi = $joi->items([$joi, ...]);
```

Defines a list of items for the "array" type.

### length

```
  my $joi = $joi->length(10);
```

Sets both "min" and "max" to the number provided.

### lowercase

```
  my $joi = $joi->lowercase;
```

Will set "regex" to only match lower case strings.

### negative

```
  my $joi = $joi->negative;
```

Sets "max" to `0`.

### number

```
  my $joi = $joi->number;
```

Sets "type" to "number".

### object

```
  my $joi = $joi->object;
```

Sets "type" to "object".

### pattern

Alias for "regex".

### positive

```
  my $joi = $joi->positive;
```

Sets "min" to `0`.

### props

```
  my $joi = $joi->props(name => JSON::Validator::Joi->new->string, ...);
```

Used to define properties for an "object" type. Each key is the name of the parameter and the values must be a JSON::Validator::Joi object.

### required

```
  my $joi = $joi->required;
```

Marks the current property as required.

### strict

```
  my $joi = $joi->strict;
```

Sets "array" and "object" to not allow any more items/keys than what is defined.

### string

```
  my $joi = $joi->string;
```

Sets "type" to "string".

### token

```
  my $joi = $joi->token;
```

Sets "regex" to `"^[a-zA-Z0-9_]+$"`.

### validate

```
  my @errors = $joi->validate($data);
```

Used to validate `$data` using "validate" in JSON::Validator. Returns a list of JSON::Validator::Error objects on invalid input.

### unique

```
  my $joi = $joi->unique;
```

Used to force the "array" to only contain unique items.

### uppercase

```
  my $joi = $joi->uppercase;
```

Will set "regex" to only match upper case strings.

### uri

```
  my $joi = $joi->uri;
```

Sets "format" to uri.

## SEE ALSO

JSON::Validator

\<https://github.com/hapijs/joi\>.
