Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(rjson)
- library(magrittr)
- library(plyr)
- library(dplyr)
- jsonFile = "[{\"speed\":4,\"dist\":2,\"brand\":\"Audi\"},
- {\"speed\":4,\"dist\":10,\"brand\":\"Benz\"},
- {\"speed\":7,\"dist\":4,\"brand\":\"Audi\"},
- {\"speed\":7,\"dist\":22,\"brand\":\"Benz\"},
- {\"speed\":8,\"dist\":16,\"brand\":\"Benz\"}
- ]"
- tmp = fromJSON(jsonFile) %>% lapply(unlist) %>% Reduce(rbind, .) %>%
- data.frame(stringsAsFactors = FALSE) %>%
- transform(dist = as.numeric(as.character(dist)),
- speed = as.numeric(as.character(speed))) %>%
- arrange(dist)
- sink("jsonRearrange.json")
- ## toJSON 轉出來的格式不適用,自己嘗試看看
- tmp %>% apply(1, function(x){
- x[sapply(x, class) == "character"] %<>% paste0("\"", ., "\"")
- x[sapply(x, class) == "factor"] %<>% paste0("\"", as.character(.), "\"")
- paste0(paste0("\"", names(x), "\":"), x) %>%
- paste(collapse = ",") %>% paste0("{", ., "}")
- }) %>% paste(.,collapse=",\n") %>%
- paste0("[", ., "]") %>% cat()
- sink()
- ## output:
- # [{"speed":4,"dist": 2,"brand":Audi},
- # {"speed":7,"dist": 4,"brand":Audi},
- # {"speed":4,"dist":10,"brand":Audi},
- # {"speed":8,"dist":16,"brand":Audi},
- # {"speed":7,"dist":22,"brand":Audi}]
- # faster method
- library(data.table)
- check.numeric <- function(x){
- all(regexpr("^\\d*\\.?\\d*$", as.character(x)) > 0)
- }
- tmp = fromJSON(jsonFile) %>% unlist() %>% cbind(names(.)) %>%
- data.table() %>% setnames(paste0("X", 1:2)) %>%
- plyr:::splitter_d(.(X2)) %>% llply(select, -X2) %>%
- llply(unlist) %>% do.call(cbind, .) %>% data.table()
- tmp %<>% sapply(check.numeric) %>% which() %>%
- names() %>% paste0(., "=as.numeric(", ., ")") %>%
- {within(tmp, eval(parse(text=.)))} %>% arrange(dist)
- output_file = tmp %>% mutate(splitter = 1:nrow(.)) %>%
- plyr:::splitter_d(.(splitter)) %>% llply(select, -splitter) %>%
- llply(toJSON) %>% do.call(c, .) %>%
- paste0(collapse = ",\n") %>% paste0("[\n", ., "\n]\n")
- sink("jsonRearrange.jason")
- cat(output_file)
- sink()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement