--- title: "Parsing JSON" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Parsing JSON} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup} library(RJSONIO) ``` `fromJSON()` parses JSON arrays, objects, strings, numbers, booleans, and nulls. The return type depends on the JSON shape and the simplification settings. ## Parse JSON text ```{r parse-text} fromJSON("[1, 3, 10, 19]") fromJSON('{"a": 1, "b": true, "c": "value"}') ``` Use `I()` when passing JSON text that should be treated explicitly as content. ```{r parse-as-is} fromJSON(I("[3.1415]")) ``` ## Parse files File paths are read from disk when `asText = FALSE`, which is the default for plain character strings that do not look like JSON content. ```{r parse-file} path <- system.file("sampleData", "keys.json", package = "RJSONIO") parsed <- fromJSON(path) names(parsed) names(parsed$menu) ``` ## Parse connections Connections are useful when JSON content is already available through an R connection object. ```{r parse-connection} con <- textConnection(c("[[1, 2, 3, 4],", "[5, 6, 7, 8]]")) parsed <- fromJSON(con) close(con) parsed ``` ## Null values By default, JSON `null` maps to `NULL` in list output. Use `nullValue` to preserve positions in simplified vectors. ```{r parse-null} fromJSON("[1, null, 4]", simplify = FALSE) fromJSON("[1, null, 4]", simplify = TRUE, nullValue = -999) ``` ## Simplification `Strict` simplification keeps incompatible values as lists. Less strict simplification can coerce mixed compatible values into an atomic vector. ```{r parse-simplify} fromJSON('[1, "2.3", "abc"]', simplify = Strict) fromJSON('[1, "2.3", "abc"]', simplify = TRUE) fromJSON('{"a": 1, "b": 2}', simplify = Strict) fromJSON('{"a": 1, "b": 2}', simplify = FALSE) ``` ## Sample data The package includes JSON fixtures that are useful for examples and local checks. ```{r sample-data} sample_dir <- system.file("sampleData", package = "RJSONIO") head(list.files(sample_dir, pattern = "[.]json$")) widget <- fromJSON(file.path(sample_dir, "widget.json")) names(widget) ```