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
Development Version
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"
)
)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.
How about topojson?
### experiment with topojson
library(httr)
library(pipeR)
library(listviewer)
# topojson for Afghanistan
url_path = "https://gist.githubusercontent.com/markmarkoh/8856417/raw/6178d18115d9f273656d294a867c3f83b739a951/customAfghanMap.topo.json"
url_path %>>%
GET %>>%
content( as = "text") %>>%
jsoneditreact-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 up
data(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 up
data(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.