# Parsing JSON

    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

    fromJSON("[1, 3, 10, 19]")
    #> [1]  1  3 10 19

    fromJSON('{"a": 1, "b": true, "c": "value"}')
    #> $a
    #> [1] 1
    #>
    #> $b
    #> [1] TRUE
    #>
    #> $c
    #> [1] "value"

Use `I()` when passing JSON text that should be treated explicitly as content.

    fromJSON(I("[3.1415]"))
    #> [1] 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.

    path <- system.file("sampleData", "keys.json", package = "RJSONIO")
    parsed <- fromJSON(path)

    names(parsed)
    #> [1] "menu"
    names(parsed$menu)
    #> [1] "header" "items"

## Parse connections

Connections are useful when JSON content is already available through an R connection object.

    con <- textConnection(c("[[1, 2, 3, 4],", "[5, 6, 7, 8]]"))
    parsed <- fromJSON(con)
    close(con)

    parsed
    #> [[1]]
    #> [1] 1 2 3 4
    #>
    #> [[2]]
    #> [1] 5 6 7 8

## Null values

By default, JSON `null` maps to `NULL` in list output. Use `nullValue` to preserve positions in simplified vectors.

    fromJSON("[1, null, 4]", simplify = FALSE)
    #> [[1]]
    #> [1] 1
    #>
    #> [[2]]
    #> NULL
    #>
    #> [[3]]
    #> [1] 4
    fromJSON("[1, null, 4]", simplify = TRUE, nullValue = -999)
    #> [1]    1 -999    4

## Simplification

`Strict` simplification keeps incompatible values as lists. Less strict simplification can coerce mixed compatible values into an atomic vector.

    fromJSON('[1, "2.3", "abc"]', simplify = Strict)
    #> [[1]]
    #> [1] 1
    #>
    #> [[2]]
    #> [1] "2.3"
    #>
    #> [[3]]
    #> [1] "abc"
    fromJSON('[1, "2.3", "abc"]', simplify = TRUE)
    #> [1] "1.000000" "2.3"      "abc"
    fromJSON('{"a": 1, "b": 2}', simplify = Strict)
    #> a b
    #> 1 2
    fromJSON('{"a": 1, "b": 2}', simplify = FALSE)
    #> $a
    #> [1] 1
    #>
    #> $b
    #> [1] 2

## Sample data

The package includes JSON fixtures that are useful for examples and local checks.

    sample_dir <- system.file("sampleData", package = "RJSONIO")
    head(list.files(sample_dir, pattern = "[.]json$"))
    #> [1] "array.json"    "array2.json"   "array3.json"   "embedded.json"
    #> [5] "glossay.json"  "int.json"

    widget <- fromJSON(file.path(sample_dir, "widget.json"))
    names(widget)
    #> [1] "widget"