Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将两个数据结构的组合转换为特定的JSON对象_Json_R_List_Lapply - Fatal编程技术网

将两个数据结构的组合转换为特定的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