第一次海报,长时间潜伏.要温柔.中等R用户.我确信有一种更好的,功能性的方式来做我需要的,但感觉我已经研究了没有洞察力的死亡.
我正在尝试将数据集合并到预先存在的JSON结构中.每个JSON结构的一行记录,用于许多序列化JSON请求.
我将数据集加载到13个变量的数据,并更改列标题以匹配它们在JSON结构中的显示方式
library(jsonlite) #### Map Column headers to their respective names in the JSON Structure colnames(data) <- c("default.A","default.B","default.C","items.A","items.B.1","items.B.2","items.B.3","items.B.4",)
创建空白JSON结构.这是需要处理JSON请求的格式.简单的嵌套结构.
sample <- '{ "default": { "A": "","B": "","C": "",},"items": [{ "A": "","B": { "1": "","2": "","3": "","4": "",} }] }' jsonstructure <- fromJSON(sample)
将一切都设为DF.合并他们.用空白填充NA
x <- as.data.frame(data) y <- as.data.frame(jsonstructure) Z <- merge(x,y,all = TRUE) Z[is.na(Z)] <- ""
转换为JSON
jsonZ <- toJSON(unname(split(Z,1:nrow(Z))),pretty=TRUE) cat(jsonZ)
电流输出不匹配
[ [ { "default.A": "","default.B": "1234567890","default.C": "","items.A": "1234567890","items.B.1": "1234","items.B.2": "1234","items.B.3": "1234","items.B.4": "1234",} ],[ { "default.A": "","default.B": "0987654321","items.A": "0987654321","items.B.1": "4321","items.B.2": "4321","items.B.3": "4321","items.B.4": "4321",} ] ]
解决方法
无法重现您的结果 – 但这是我对您想要实现的目标的猜测.请参阅注释以获取有关代码的帮助.
library(jsonlite) #data.frame with data - you have probably more than 2 rows data=data.frame(rbind(t(c(NA,1234567890,NA,1234,1234)),t(c(1,2,3,1,1000,1234)))) cn=c("default.A","items.B.4") colnames(data)=cn #assuming that "." represents structure mapping=strsplit(cn,"\\.") #template JSON jsonstructure <- fromJSON('{"default": {"A": "","C": ""},"items": [{"A": "","B": {"1": "","4": ""}}]}') #Now loop through all rows in your data.frame and store them in JSON format #this will give you a list with JSON objects (i.e.,a list of lists) json_list=lapply(split(data,1:nrow(data)),function(data_row) { for (i in seq_along(mapping)) jsonstructure[[mapping[[i]]]]<-data_row[,cn[i]] jsonstructure })
结果:
toJSON(json_list[[2]],pretty = TRUE,auto_unBox=TRUE) #{ # "default": { # "A": 1,# "B": "NA",# "C": 2 # },# "items": [ # { # "A": 3,# "B": { # "1": 1,# "2": 1000,# "4": 1234 # } # } # ] #}
只是另一个评论.我的方法使用列表的递归子集,如[运算符的帮助中所述:
[[ can be applied recursively to lists,so that if the single index i is a vector of length p,alist[[i]] is equivalent to alist[[i1]]…[[ip]] providing all but the final indexing results in a list.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。