我相信这是一件相当简单的事情,但我无法弄清楚。
我在 R 中有一个数据帧,如下所示:
a b c
1 9 J
2 5 K
当我使用 toJSON 并将数据帧作为命名列表传递时
val <- toJSON(list( table = df), pretty = TRUE)
我得到:
{ "table":[
{
{
"a":"1",
"b":"9",
"c":"J"
}
},
{
{
"a":"2",
"b":"5",
"c":"K"
}
}
]
}
如何让每个 JSON 对象命名为"条目",如下所示:
{ "table":[
{
"entry":{
"a":"1",
"b":"9",
"c":"J"
}
},
{
"entry":{
"a":"2",
"b":"5",
"c":"K"
}
}
]
}
获取所需的结构有点复杂,因为{"entry":{"a":1,"b":9,"c":"J"}}
对象
要获得此结构,您需要有一个命名列表
lst <- list( list(a = 1, b = 9, c = "J") )
attr( lst, "names" ) <- "entry"
toJSON( lst, auto_unbox = TRUE )
# {"entry":{"a":1,"b":9,"c":"J"}}
因此,data.frame 的每一行都需要是一个命名列表
res <- lapply( seq_len( nrow( df ) ), function(i) {
lst <- list( as.list( df[i, , drop = F] ) )
attr( lst, "names" ) <- "entry"
lst
})
## add the 'table'
res <- list( table = res )
toJSON( res, auto_unbox = TRUE, pretty = TRUE )
# {
# "table": [
# {
# "entry": {
# "a": 1,
# "b": 9,
# "c": "J"
# }
# },
# {
# "entry": {
# "a": 2,
# "b": 5,
# "c": "K"
# }
# }
# ]
# }