【问题标题】:Is there a way to remove quotes from the output of a data frame entered into the toJSON function in R?有没有办法从输入到 R 中的 toJSON 函数的数据框的输出中删除引号?
【发布时间】:2019-07-22 07:38:39
【问题描述】:

我正在尝试将 R 中的数据框作为 json 文件输出,以用于我在 R 之外制作的 highcharts 图。这就是我的输出的样子:-

[{"name":"alpha","value":1},{"name":"brave","value":2},{"name":"charlie","value":3}]

但是,我希望我的输出看起来像这样:-

[{name:"alpha",value:1},{name:"brave",value:2} {name:"charlie",value:3}] 

我应该怎么做才能不将我的数据框的名称(在本例中为名称和值)放在引号中?如果将我的数据转换为 json 文件不是最好的方法,我还能/应该做什么?

library(tidyverse)
library(jsonlite)
data = tibble(name = c("alpha", "bravo", "charlie"), 
              value = c(1, 2, 3))
output = toJSON(data, dataframe="rows")
write(output, "output.txt")

【问题讨论】:

  • 你想要的输出不是有效的 json,你知道吗?
  • 是的,你是对的,但我不知道如何表达我的句子。

标签: r json jsonlite r-highcharter


【解决方案1】:

使用regex 的一种可能方式,从出现在冒号: 之前的值中删除引号

json_string <- jsonlite::toJSON(data, dataframe="rows")

temp <- stringr::str_replace_all(json_string, '"(\\w+)"\\s*:', '\\1:')
cat(temp)
#[{name:"alpha",value:1},{name:"bravo",value:2},{name:"charlie",value:3}]

write(temp, "output.txt")

【讨论】:

    【解决方案2】:

    不确定如何在 toJSON 中执行此操作,但您可以使用 qdap 库中的 mgsub

    sapply(names(data), function(name_i){
      output <<- mgsub(paste0("\"", name_i, "\""), name_i, output)})
    

    这给了你

    output
    [{name:"alpha",value:1},{name:"bravo",value:2},{name:"charlie",value:3}] 
    

    【讨论】:

      【解决方案3】:

      另一种方式 -

      library(tidyverse)
      library(jsonlite)
      data = tibble(name = c("alpha", "bravo", "charlie"), value = c(1, 2, 3))
      output = toJSON(data)
      output=gsub("\"(\\w*)\":", "\\1:", output,perl=TRUE)
      print(output)
      

      输出 -

      [{name:"alpha",value:1},{name:"bravo",value:2},{name:"charlie",value:3}]
      

      【讨论】:

        猜你喜欢
        • 2014-01-01
        • 2020-08-01
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-29
        • 1970-01-01
        相关资源
        最近更新 更多