【问题标题】:Convert data.frame into json in R在R中将data.frame转换为json
【发布时间】:2015-05-05 07:54:18
【问题描述】:

我正在尝试将 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 转换为上面所需的输出。非常感谢转发。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用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"]
    # ]
    

    【讨论】:

    • 感谢您的快速回答...但是如果我尝试
    • 更新jsonlite 包?使用jsonlite::toJSON?该示例在这里工作正常。我使用的是 0.9.16 版。
    • 哦,对,你没看错,需要更新jsonlite包。哦,也许我没有注意到一件事:我如何将您提议的脚本更改为:[“Product”,“Val1”,“Val2”,“Val3”,“Description”],在第一行?跨度>
    • 哎呀,我没有注意到你想要第 1 行的标题 - 请参阅我的更新。
    • 请注意,您现在有字符串,包裹在 " 中。
    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多