将data.frame转换为R中的json

时间:2015-05-05 07:54:18

标签: r

我试图将R data.frame转换为json文件,以便在js代码中通过jquery进一步调用此json文件。

我有以下data.frame:

# Input data.frame
data <- data.frame(Product=c("Prod1","Prod2","Prod3","Prod4"), Val1=c(4,5,2,6.8), Val2=c(6,5,2,7.8), Val3=c(8,5,6,6.7),
               Description=c("Doritos 1.0 Intel PAV UMA","Stag 1.2 Intel PAV UMA","Pike 1.0 Intel Spectre x360",
                             "Antinori 1.2 Intel PAV UMA"))

我需要将其转换为json文件,就像这样:

# Desired Output
[
  ["Product","Val1","Val2","Val3", "Description"],
  ["Prod1",4,6,8,"Doritos 1.0 Intel PAV UMA"],
  ["Prod2",5,5,5,"Stag 1.2 Intel PAV UMA"],
  ["Prod3",2,2,6,"Pike 1.0 Intel Spectre x360"],
  ["Prod4",6.8,7.8,6.7,"Antinori 1.2 Intel PAV UMA"]
]

我尝试使用 jsonlite 包的 toJSON ,但输出不是我需要的输出。

你能帮助我吗,我怎样才能将原始data.frame转换成上面所需的输出。非常感谢前进。

1 个答案:

答案 0 :(得分:0)

您可以使用unname获取json输出中的方括号:

library(jsonlite)
data <- rbind(names(data), sapply(data, as.character))
toJSON(unname(data), pretty = T)
# [
#   ["Product", "Val1", "Val2", "Val3", "Description"],
#   ["Prod1", "4", "6", "8", "Doritos 1.0 Intel PAV UMA"],
#   ["Prod2", "5", "5", "5", "Stag 1.2 Intel PAV UMA"],
#   ["Prod3", "2", "2", "6", "Pike 1.0 Intel Spectre x360"],
#   ["Prod4", "6.8", "7.8", "6.7", "Antinori 1.2 Intel PAV UMA"]
# ] 

替代:

df.toJSON <- function(data) { 
  out <- capture.output(write.csv(data, row.names = FALSE, eol = "],\n"))
  out <- paste(paste0("  [", out, collapse = "\n"))
  out <- substr(out, 0, nchar(out)-1)
  out <- paste0("\n[\n", out, "\n]")
  return(out)
}
cat(df.toJSON(data))
# [
#   ["Product","Val1","Val2","Val3","Description"],
#   ["Prod1",4,6,8,"Doritos 1.0 Intel PAV UMA"],
#   ["Prod2",5,5,5,"Stag 1.2 Intel PAV UMA"],
#   ["Prod3",2,2,6,"Pike 1.0 Intel Spectre x360"],
#   ["Prod4",6.8,7.8,6.7,"Antinori 1.2 Intel PAV UMA"]
# ]