从列表的jsonlite转换中保留json对象中的重复名称

时间:2016-05-05 21:28:05

标签: json r jsonlite

如何使用jsonlite保持重复的名称将列表转换为json对象?

z<-as.list(letters[1:3])
names(z)<-c("tmp","tmp","tmp")
toJSON(z,auto_unbox=TRUE)

结果

 {"tmp":"a","tmp.1":"b","tmp.2":"c"} 

但我需要

 {"tmp": ["a", "b", "c"]}

更新:更简单的解决方案是将所有内容捆绑到列表中

 my_list<-list()
 my_list$id<-"id"
 my_list$tmp<-c("a","b","c")
 toJSON(my_list,auto_unbox=T) # properly formatted JSON

更新:这个问题非常适合处理每个JSON对象单独取消装箱的情况encoding a JSON expression from R with jsonlite or something else

1 个答案:

答案 0 :(得分:2)

您必须自己进行对象操作以重塑对象以获得正确的JSON输出。要获得所需的输出,您需要一个命名的数组列表。以下是将数据转换为此类对象的方法

jsonlite:::toJSON(with(stack(z), tapply(values, ind, c, simplify=FALSE)))
# {"tmp":["a","b","c"]} 

基本上stack()将数据折叠为data.frame,然后我们将数据分组到列表中。