---
title: "Writing JSON"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Writing JSON}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
```{r setup}
library(RJSONIO)
```
`toJSON()` serializes R objects to JSON text. It has methods for common base R
types and can be extended with S4 methods.
## Atomic vectors
```{r atomic-vectors}
toJSON(c(1, 2, 3))
toJSON(c(TRUE, FALSE))
toJSON(c("abc", "xyz"))
```
Named atomic vectors are written as JSON objects.
```{r named-vectors}
toJSON(c(a = 1, b = 2))
fromJSON(toJSON(c(a = 1, b = 2)))
```
## Lists and nested values
Lists can represent nested JSON objects and arrays.
```{r lists}
value <- list(
name = "example",
flags = c(TRUE, FALSE),
nested = list(x = 1, y = "two")
)
cat(toJSON(value, pretty = TRUE))
```
## Data frames
By default, data frames are serialized by column. Use `byrow = TRUE` to write a
row-oriented array.
```{r data-frames}
data <- data.frame(id = 1:2, label = c("a", "b"))
cat(toJSON(data, pretty = TRUE))
cat(toJSON(data, byrow = TRUE, colNames = TRUE, pretty = TRUE))
```
## Matrices and arrays
```{r matrices-arrays}
mat <- matrix(1:4, nrow = 2)
cat(toJSON(mat))
arr <- array(1:8, dim = c(2, 2, 2))
isValidJSON(I(toJSON(arr)))
```
## Missing and empty values
Missing values are written as JSON `null` by default. Empty unnamed lists are
written as arrays, while `emptyNamedList` is written as an object.
```{r missing-empty}
toJSON(c("a", NA, "b"))
fromJSON(toJSON(c("a", NA, "b")), nullValue = NA, simplify = TRUE)
toJSON(list())
toJSON(emptyNamedList)
```
## Numeric formatting
The `digits` argument controls numeric formatting.
```{r digits}
toJSON(c(pi, exp(1)), digits = 4)
toJSON(c(pi, exp(1)), digits = 8)
```