【问题标题】:R dataframe to JSON array of objectsR数据框到对象的JSON数组
【发布时间】:2018-06-22 13:05:47
【问题描述】:

我有一个如下格式的 R 数据框

id  code  value
1   A      3
2   B      5 
3   C      9

使用:

  toJSON(df)
  returns:
  [{id:1,code:A,value:3},...]

我想要的输出是:

[{1,A,3},{2,B,5}..]

使用

 df <- unname(df)
 returns an array of arrays, [[..],[..],...]]

我使用的是 jsonlite 包

【问题讨论】:

  • [{1,A,3},{2,B,5}] 不是有效的 JSON。
  • 如果您正在寻找[{1,A,3},{2,B,5}..],您需要一个键值格式,因为它是 JSON 格式。类似[{id:1,code:A,value:3}]
  • 谢谢。我将相应地更改我的代码。我想要没有列名,但我认为键值格式将适用于此。

标签: r jsonlite


【解决方案1】:

正如@nicola 所说,您所请求的 ([{1,A,3},{2,B,5},...]) 不是有效的 JSON。我相信你能得到的最接近的(没有名字)是这样的:

df <- read.table(header=TRUE, stringsAsFactors=FALSE, text='id  code  value
1   A      3
2   B      5 
3   C      9')
library(jsonlite)

toJSON(lapply(seq.int(nrow(df)), function(i) unname(lapply(df, `[[`, i))),
       auto_unbox=TRUE)
# [[1,"A",3],[2,"B",5],[3,"C",9]] 

通常,jsonlite 喜欢将标量保持为一维向量,因此如果您删除 auto_unbox=TRUE 组件,您将得到:

toJSON(lapply(seq.int(nrow(df)), function(i) unname(lapply(df, `[[`, i))))
# [[[1],["A"],[3]],[[2],["B"],[5]],[[3],["C"],[9]]] 

这可能在功能上是相同的,具体取决于您使用这些数据的方式。 (我同意未装箱的实现更易于人类阅读。)

这两种方法都保留了列值的类型(数字、字符串)。

【讨论】:

  • 谢谢。我现在知道了。我想要它没有列名,所以这会起作用。将阅读更多关于键值格式的内容。
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多