--- title: "Type Mapping" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Type Mapping} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup} library(RJSONIO) ``` JSON and R have similar but not identical type systems. This article summarizes the common mappings used by `fromJSON()` and `toJSON()`. ## JSON to R ```{r json-to-r-table, echo = FALSE} data.frame( JSON = c("object", "array", "string", "number", "true/false", "null"), R = c("named list or simplified named vector", "list or simplified vector/matrix", "character", "numeric", "logical", "NULL or the value supplied through nullValue"), check.names = FALSE ) ``` ```{r json-to-r-examples} str(fromJSON('{"a": 1, "b": 2}', simplify = FALSE)) str(fromJSON("[1, 2, 3]")) str(fromJSON('["a", "b", "c"]')) str(fromJSON("[true, false]")) str(fromJSON("[1, null, 3]", nullValue = NA, simplify = TRUE)) ``` ## R to JSON ```{r r-to-json-table, echo = FALSE} data.frame( R = c("named list", "unnamed list", "atomic vector", "named atomic vector", "matrix", "data.frame", "NA", "NULL"), JSON = c("object", "array", "array", "object", "nested array", "object by column, or array by row", "null", "null"), check.names = FALSE ) ``` ```{r r-to-json-examples} toJSON(list(a = 1, b = TRUE)) toJSON(list(1, TRUE, "x")) toJSON(c(1, 2, 3)) toJSON(c(a = 1, b = 2)) toJSON(matrix(1:4, nrow = 2)) toJSON(data.frame(a = 1:2, b = c("x", "y"))) toJSON(NA) toJSON(NULL) ``` ## Empty containers Empty containers can carry different meaning depending on names. ```{r empty-containers} toJSON(list()) toJSON(emptyNamedList) fromJSON("[]") fromJSON("{}") ``` ## Simplification constants The exported constants can be combined to control simplification. ```{r simplify-constants} Strict StrictNumeric StrictCharacter StrictLogical fromJSON('[1, true]', simplify = Strict) fromJSON('[1, true]', simplify = TRUE) ```