将两个数据结构的组合转换为特定的JSON对象
假设您拥有以下数据:将两个数据结构的组合转换为特定的JSON对象,json,r,list,lapply,Json,R,List,Lapply,假设您拥有以下数据: obj1 <- list('A', 'B', c('A', 'B')) obj2 <- rep(1, 3) 请注意,即使是像A这样的单个元素也包含在方括号中 我现在的问题是,生成这个JSON结构最简单的方法是什么obj1和obj2不必是列表或向量。它也可以是单个数据帧。重要的是最终JSON输出的结构 到目前为止,我的尝试是成功的 tmp <- lapply(obj1, FUN = function(x) { x <- list("obj1"
obj1 <- list('A', 'B', c('A', 'B'))
obj2 <- rep(1, 3)
请注意,即使是像A
这样的单个元素也包含在方括号中
我现在的问题是,生成这个JSON结构最简单的方法是什么obj1
和obj2
不必是列表或向量。它也可以是单个数据帧。重要的是最终JSON输出的结构
到目前为止,我的尝试是成功的
tmp <- lapply(obj1, FUN = function(x) {
x <- list("obj1" = x)
x$obj2 <- obj2[1]
obj2 <<- obj2[-1]
return(x)
})
jsonlite::toJSON(tmp)
tmp这似乎有效:
df <- data.frame(obj1 = I(obj1), obj2 = I(as.list(obj2)))
toJSON(df)
# [{"obj1":["A"],"obj2":[1]},{"obj1":["B"],"obj2":[1]},{"obj1":["A","B"],"obj2":[1]}]
jsonlite::toJSON(tmp)
# [{"obj1":["A"],"obj2":[1]},{"obj1":["B"],"obj2":[1]},{"obj1":["A","B"],"obj2":[1]}]
obj2
中的值都是1s,但在您的示例中,输出是10,10,0.5。这是故意的吗?(我猜不是。)不,不是。我的错误。很抱歉编辑完毕,谢谢。这看起来比我的第一个方法要好得多。不过,我会给你多一点时间:)
df <- data.frame(obj1 = I(obj1), obj2 = I(as.list(obj2)))
toJSON(df)
# [{"obj1":["A"],"obj2":[1]},{"obj1":["B"],"obj2":[1]},{"obj1":["A","B"],"obj2":[1]}]
jsonlite::toJSON(tmp)
# [{"obj1":["A"],"obj2":[1]},{"obj1":["B"],"obj2":[1]},{"obj1":["A","B"],"obj2":[1]}]
json <- gsub(
"'", '"',
"[{'obj1':['A'],'obj2':[1]},{'obj1':['B'],'obj2':[1]},{'obj1':['A','B'],'obj2':[1]}]"
)
str(fromJSON(json))
# 'data.frame': 3 obs. of 2 variables:
# $ obj1:List of 3
# ..$ : chr "A"
# ..$ : chr "B"
# ..$ : chr "A" "B"
# $ obj2:List of 3
# ..$ : int 1
# ..$ : int 1
# ..$ : int 1