List queries

leveraging jqr, an R interface to jq, a JSON processor http://stedolan.github.io/jq/

Installation

remotes::install_github("ropensci/lq")

Interfaces

low level

(x <- list(a = list(b = list(c = 1, d = 2, e = 3)), f = 45))
#> $a
#> $a$b
#> $a$b$c
#> [1] 1
#>
#> $a$b$d
#> [1] 2
#>
#> $a$b$e
#> [1] 3
#>
#>
#>
#> $f
#> [1] 45
lq(x, ".[][] | keys | reverse")
#> [1] "e" "d" "c"

high level

library(jqr)
(tj(x) %>% index()) %>% fj
#> [[1]]
#> [[1]]$b
#> [[1]]$b$c
#> [1] 1
#>
#> [[1]]$b$d
#> [1] 2
#>
#> [[1]]$b$e
#> [1] 3
#>
#>
#>
#> [[2]]
#> [1] 45
(tj(x) %>% index() %>% index()) %>% fj
#> $c
#> [1] 1
#>
#> $d
#> [1] 2
#>
#> $e
#> [1] 3
(tj(x) %>% index() %>% index() %>% select(. > 2)) %>% fj
#> $c
#> [1] 1
#>
#> $d
#> [1] 2
#>
#> $e
#> [1] 3
(tj(x) %>% index() %>% select(. > 2)) %>% fj
#> [[1]]
#> [[1]]$b
#> [[1]]$b$c
#> [1] 1
#>
#> [[1]]$b$d
#> [1] 2
#>
#> [[1]]$b$e
#> [1] 3
#>
#>
#>
#> [[2]]
#> [1] 45
(tj(x) %>% index() %>% index() %>% keys() %>% reverse) %>% fj
#> [1] "e" "d" "c"

TODO

  • make hooks like in jqr so that we automatigically convert json back to list instead of needing fj() at the end of a high level DSL workflow
  • similarly, make tj() unneccesary
  • other smart things with lists … 😏

Meta