Extract and manipulate parts of JSON files without touching the formatting and comments in other parts.
Installation
You can install the development version of tsjson from GitHub with:
# install.packages("pak")
pak::pak("gaborcsardi/tsjson")
Documentation
See at https://gaborcsardi.github.io/tsjson/
and also in the installed package: help(package = "tsjson")
.
Quickstart
Create a tjson object
Create a tsjson object from a string:
txt <- r"(
// this is a comment
{
"a": {
"a1": [1, 2, 3],
// comment
"a2": "string"
},
"b": [
{
"b11": true,
"b12": false
},
{
"b21": false,
"b22": false
}
]
}
)"
json <- load_json(text = txt)
Pretty print a tsjson object:
json
#> # json (19 lines) #> 1 | #> 2 | // this is a comment #> 3 | { #> 4 | "a": { #> 5 | "a1": [1, 2, 3], #> 6 | // comment #> 7 | "a2": "string" #> 8 | }, #> 9 | "b": [ #> 10 | { #> ℹ 9 more lines #> ℹ Use `print(n = ...)` to see more lines
Select elements in a tsjson object
Select element by objects key:
select(json, "a")
#> # json (19 lines, 1 selected element) #> 1 | #> 2 | // this is a comment #> 3 | { #> > 4 | "a": { #> > 5 | "a1": [1, 2, 3], #> > 6 | // comment #> > 7 | "a2": "string" #> > 8 | }, #> 9 | "b": [ #> 10 | { #> 11 | "b11": true, #> ...
Select element inside element:
select(json, "a", "a1")
#> # json (19 lines, 1 selected element) #> 2 | // this is a comment #> 3 | { #> 4 | "a": { #> > 5 | "a1": [1, 2, 3], #> 6 | // comment #> 7 | "a2": "string" #> 8 | }, #> ...
Select element(s) of an array:
select(json, "a", "a1", 1:2)
#> # json (19 lines, 2 selected elements) #> 2 | // this is a comment #> 3 | { #> 4 | "a": { #> > 5 | "a1": [1, 2, 3], #> 6 | // comment #> 7 | "a2": "string" #> 8 | }, #> ...
Select multiple keys from an object:
#> # json (19 lines, 2 selected elements) #> 2 | // this is a comment #> 3 | { #> 4 | "a": { #> > 5 | "a1": [1, 2, 3], #> 6 | // comment #> > 7 | "a2": "string" #> 8 | }, #> 9 | "b": [ #> 10 | { #> ...
Delete elements
Delete selected elements:
select(json, "a", "a1") |> delete_selected()
#> # json (18 lines) #> 1 | #> 2 | // this is a comment #> 3 | { #> 4 | "a": { #> 5 | // comment #> 6 | "a2": "string" #> 7 | }, #> 8 | "b": [ #> 9 | { #> 10 | "b11": true, #> ℹ 8 more lines #> ℹ Use `print(n = ...)` to see more lines
Insert elements
Insert element into an array:
select(json, "a", "a1") |> insert_into_selected(at = 2, "new")
#> # json (24 lines) #> 1 | #> 2 | // this is a comment #> 3 | { #> 4 | "a": { #> 5 | "a1": [ #> 6 | 1, #> 7 | 2, #> 8 | "new", #> 9 | 3 #> 10 | ], #> ℹ 14 more lines #> ℹ Use `print(n = ...)` to see more lines
Inserting into an array reformats the array.
Insert element into an object, at the specified key:
select(json, "a") |>
insert_into_selected(key = "a0", at = 0, list("new", "element"))
#> # json (27 lines) #> 1 | #> 2 | // this is a comment #> 3 | { #> 4 | "a": { #> 5 | "a0": [ #> 6 | "new", #> 7 | "element" #> 8 | ], #> 9 | "a1": [ #> 10 | 1, #> ℹ 17 more lines #> ℹ Use `print(n = ...)` to see more lines
Update elements
Update existing element:
select(json, "a", c("a1", "a2")) |> update_selected("new value")
#> # json (19 lines) #> 1 | #> 2 | // this is a comment #> 3 | { #> 4 | "a": { #> 5 | "a1": "new value", #> 6 | // comment #> 7 | "a2": "new value" #> 8 | }, #> 9 | "b": [ #> 10 | { #> ℹ 9 more lines #> ℹ Use `print(n = ...)` to see more lines
Inserts the element if some parents are missing:
json <- load_json(text = "{ \"a\": { \"b\": true } }")
json
#> # json (1 line) #> 1 | { "a": { "b": true } }
select(json, "a", "x", "y") |> update_selected(list(1,2,3))
#> # json (10 lines) #> 1 | { "a": { #> 2 | "b": true, #> 3 | "x": { #> 4 | "y": [ #> 5 | 1, #> 6 | 2, #> 7 | 3 #> 8 | ] #> 9 | } #> 10 | } }