R lists, especially nested lists, can be very difficult to visualize or represent. Sometimes 'str()' is not enough, so this suite of htmlwidgets is designed to help see, understand, and maybe even modify your R lists. The function 'reactjson()' requires a package 'reactR' that can be installed from CRAN or < https://github.com/timelyportfolio/reactR>.
A package of R htmlwidgets to interactively view and maybe modify
lists
. As of now, listviewer
provides an interface to jsoneditor
and react-json-view
. listviewer
is designed to support multiple interfaces.
CRAN
install.packages("listviewer")
Development Version
devtools::install_github("timelyportfolio/listviewer")
jsoneditor
is a really well designed JSON
interactive editor by Jos de Jong. Since most R
data can be represented in JSON
, we can use this great JavaScript
library in R
.
# using the data from the jsoneditor simple example# in R list form library(listviewer) jsonedit( list( array = c(1,2,3) ,boolean = TRUE ,null = NULL ,number = 123 ,object = list( a="b", c="d" ) ,string = "Hello World" ))
# also works with data.framesjsonedit( mtcars )
# helpful interactive view of parjsonedit( par() )
# meta view of the abovejsonedit(jsonedit(par()))
See the above interactive view of par for yourself.
I got this idea courtesy of @jasonpbecker on Twitter. htmlwidgets
dependencies are defined by YAML
. Let's see the dependencies for jsonedit
.
jsonedit( yaml.load_file(system.file("htmlwidgets/jsonedit.yaml",package="listviewer")))
How about topojson
?
### experiment with topojsonlibrary(httr)library(pipeR)library(listviewer) # topojson for Afghanistanurl_path = "https://gist.githubusercontent.com/markmarkoh/8856417/raw/6178d18115d9f273656d294a867c3f83b739a951/customAfghanMap.topo.json" url_path %>>% GET %>>% content( as = "text") %>>% jsonedit
react-json-view
is another very nice JSON
interactive editor. We even get copy/paste! All of the above examples should also work with reactjson
.
# using the data from the jsoneditor simple example# in R list form library(listviewer) reactjson( list( array = c(1,2,3) ,boolean = TRUE ,null = NULL ,number = 123 ,object = list( a="b", c="d" ) ,string = "Hello World" ))
listviewer
works with Shiny
but the implementation is crude and likely to change for jsonedit
while reactjson
integration is much better. If you really want to use jsonedit
with Shiny
, I would recommend debouncing
the change
callback. Here are examples with each.
library(shiny)library(listviewer) # put some data in environment so it will show updata(mtcars) ui <- shinyUI( fluidPage( jsoneditOutput( "jsed" ) )) server <- function(input,output){ output$jsed <- renderJsonedit({ jsonedit( as.list( .GlobalEnv ) ,"change" = htmlwidgets::JS('function(){ console.log( event.currentTarget.parentNode.editor.get() ) }') ) })} runApp( list( ui = ui, server = server ) )
library(shiny)library(listviewer) # put some data in environment so it will show updata(mtcars) ui <- shinyUI( fluidPage( reactjsonOutput( "rjed" ) )) server <- function(input,output){ output$rjed <- renderReactjson({ reactjson( as.list( .GlobalEnv ) ) }) observeEvent(input$rjed_edit, { str(input$rjed_edit, max.level=2) })} runApp( list( ui = ui, server = server ) )
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
jsoneditor
to 5.24.6react-json-view
to 2.5.7props
for react-json-view
reactjson()
to use react-json-view
instead of react-json
elementId
to the jsonedit
functionreact-json
to 0.2.1
number_unnamed
function (see issue)jsonedit_gadget