---
title: "Ajvr: getting-started"
author: "Jason Thorpe"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Vignette Title}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---


The `ajvr` library is a very thin wrapper around the awesome
[AJV](https://github.com/epoberezkin/ajv) JSON validation library.  The
essential change between the syntax presented in the official [AJV
Readme](https://github.com/epoberezkin/ajv) is exchanging JavaScripts dot
operator (`.`) with R's dollar-sign operator (`$`).

Note that care must be taken in transforming R objects to JSON, because of
R's everything-is-a-vector philosopy. Hence, for convenience file paths to
valid JSON (`.json`) and YAML (`.yml` or `.yaml`)  may be used wherever an
object is expected.

## Getting started

The fastest validation call:

```{r, eval=FALSE}
library('ajv')
var ajv = Ajv() # options can be passed, e.g. list(allErrors= TRUE)
var validate = ajv$compile(schema)
var valid = validate(data)
if (!valid) print(validate$errors)
```

or with less code

```{r, eval=FALSE}
# ...
var valid = ajv$validate(schema, data)
if (!valid) print(ajv$errors)
# ...
```

or

```{r, eval=FALSE}
# ...
ajv$addSchema(schema, 'mySchema')
var valid = ajv$validate('mySchema', data)
if (!valid) print(ajv$errorsText())
# ...
```

Note that in each of these calls, `schema` and `data` arguments may be a
valid JSON string, an R object (i.e. `list(...)`), a connection to a JSON
file, or the file name of JSON or YAML file.  YAML files are parsed via
[js-yaml](https://www.npmjs.com/package/js-yaml)'s `safeLoad()` method.

See [API](https://github.com/epoberezkin/ajv#api) and
[Options](https://github.com/epoberezkin/ajv#options) for more details.

