Packages
jsv
0.10.0
0.21.2
0.21.1
0.21.0
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.5
0.11.4
0.11.3
retired
0.11.2
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
A JSON Schema Validator with complete support for the latest specifications.
Current section
Files
Jump to
Current section
Files
README.md
# JSV
<!-- rdmx :badges
hexpm : "jsv?color=4e2a8e"
github_action : "lud/jsv/elixir.yaml?label=CI&branch=main"
license : jsv
-->
[](https://hex.pm/packages/jsv)
[](https://github.com/lud/jsv/actions/workflows/elixir.yaml?query=branch%3Amain)
[](https://hex.pm/packages/jsv)
<!-- rdmx /:badges -->
JSV is a JSON Schema Validation library for Elixir with full support for the latest JSON Schema specification.
## Documentation
[API documentation is available on hexdocs.pm](https://hexdocs.pm/jsv/).
## Installation
<!-- rdmx :app_dep vsn:$app_vsn -->
```elixir
def deps do
[
{:jsv, "~> 0.10"},
]
end
```
<!-- rdmx /:app_dep -->
Additional dependencies can be added to support more features:
```elixir
def deps do
[
# Optional libraries for enhanced format validation like URI, IRI, email
# address, JSON-pointer, etc.
{:abnf_parsec, "~> 1.0"},
# JSV Supports Decimal and will validate Decimal structs as numbers.
{:decimal, "~> 2.0"},
# Optional libraries for decoding schemas resolved via HTTP
# (required for Elixir versions prior to 1.18)
{:jason, "~> 1.0"},
# OR
{:poison, "~> 6.0 or ~> 5.0"},
]
end
```
## Basic Usage
Here is an example of how to use the library:
```elixir
schema = %{
type: :object,
properties: %{
name: %{type: :string}
},
required: [:name]
}
root = JSV.build!(schema)
case JSV.validate(%{"name" => "Alice"}, root) do
{:ok, data} ->
{:ok, data}
# Errors can be converted into JSON-compatible structures for API responses
# or logging.
{:error, validation_error} ->
{:error, JSON.encode!(JSV.normalize_error(validation_error))}
end
```
JSV offers many additional features! Check the documentation for more details.
## Contributing
Pull requests are welcome, provided they include appropriate tests and documentation.