celestialgod

toJSON by row

Jun 3rd, 2015
563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 2.23 KB | None | 0 0
  1. library(rjson)
  2. library(magrittr)
  3. library(data.table)
  4. library(plyr)
  5. library(dplyr)
  6.  
  7. toJSON_byRow_1 = function(dat){
  8.   dat %>% alply(1, identity) %>% unname %>% toJSON %>% cat
  9. }
  10.  
  11. toJSON_byRow_2 = function(dat){
  12.   dat %>% apply(1, function(x){
  13.       x[sapply(x, class) == "character"] %<>% paste0("\"", ., "\"")
  14.       x[sapply(x, class) == "factor"] %<>% paste0("\"", as.character(.), "\"")
  15.       paste0(paste0("\"", names(x), "\":"), x) %>%
  16.         paste(collapse = ",") %>% paste0("{", ., "}")
  17.     }) %>% paste(.,collapse=",\n") %>%
  18.     paste0("[", ., "]") %>% cat()
  19. }
  20.  
  21. toJSON_byRow_3 = function(dat){
  22.   check.numeric <- function(x){
  23.     all(regexpr("^\\d*\\.?\\d*$", as.character(x)) > 0)
  24.   }
  25.    
  26.   dat %<>% sapply(check.numeric) %>% which() %>%
  27.     names() %>% paste0(., "=as.numeric(", ., ")") %>%
  28.     {within(dat, eval(parse(text=.)))}
  29.  
  30.   dat %>% mutate(splitter = 1:nrow(.)) %>%
  31.     plyr:::splitter_d(.(splitter)) %>% llply(select, -splitter) %>%
  32.     llply(toJSON) %>% do.call(c, .) %>%
  33.     paste0(collapse = ",\n") %>% paste0("[\n", ., "\n]\n") %>% cat()
  34. }
  35.  
  36. jsonFile = "[{\"speed\":4,\"dist\":2,\"brand\":\"Audi\"},
  37.  {\"speed\":4,\"dist\":10,\"brand\":\"Benz\"},
  38.  {\"speed\":7,\"dist\":4,\"brand\":\"Audi\"},
  39.  {\"speed\":7,\"dist\":22,\"brand\":\"Benz\"},
  40.  {\"speed\":8,\"dist\":16,\"brand\":\"Benz\"}
  41. ]"
  42.  
  43. dat = fromJSON(jsonFile) %>% unlist() %>% cbind(names(.)) %>%
  44.   data.table() %>% setnames(paste0("X", 1:2)) %>%
  45.   plyr:::splitter_d(.(X2)) %>% laply(function(x){
  46.     x[,1]
  47.   }) %>% t() %>% data.table()
  48.  
  49.  
  50. toJSON_byRow_1(dat)
  51. # [{"brand":"Audi","dist":"2","speed":"4"},{"brand":"Benz","dist":"10","speed":"4"},{"brand":"Audi","dist":"4","speed":"7"},{"brand":"Benz","dist":"22","speed":"7"},{"brand":"Benz","dist":"16","speed":"8"}]
  52. toJSON_byRow_2(dat)
  53. # [{"brand":"Audi","dist":"2","speed":"4"},
  54. # {"brand":"Benz","dist":"10","speed":"4"},
  55. # {"brand":"Audi","dist":"4","speed":"7"},
  56. # {"brand":"Benz","dist":"22","speed":"7"},
  57. # {"brand":"Benz","dist":"16","speed":"8"}]
  58. toJSON_byRow_3(dat)
  59. # [
  60. # {"brand":"Audi","dist":2,"speed":4},
  61. # {"brand":"Benz","dist":10,"speed":4},
  62. # {"brand":"Audi","dist":4,"speed":7},
  63. # {"brand":"Benz","dist":22,"speed":7},
  64. # {"brand":"Benz","dist":16,"speed":8}
  65. # ]
Advertisement
Add Comment
Please, Sign In to add comment