我正在使用jsonlite中的toJSON()将特定结构的嵌套列表(API所需)转换为JSON。但是,我需要最终的JSON不包含外部方括号(API也需要)。
test_list <- list(
list(formName = "test_title", user_id = "test_userid", rows = list(list(row = 0))),
list(formName = "test_title2", user_id = "test_userid2", rows = list(list(row = 0)))
)
jsonlite::toJSON(test_list, pretty = TRUE, auto_unbox = TRUE)
其给出:
[
{
"formName": "test_title",
"user_id": "test_userid",
"rows": [
{
"row": 0
}
]
},
{
"formName": "test_title2",
"user_id": "test_userid2",
"rows": [
{
"row": 0
}
]
}
]
但是我需要去掉第一个和最后一个方括号。
我可以使用purrr::flatten()来删除列表的顶层,从而删除JSON中的方括号,但是toJSON()似乎不喜欢列表中有重复的名称,并将它们重命名为name.1,name.2,name.3等(API也不允许)。
即:
jsonlite::toJSON(test_list %>% purrr::flatten(), pretty = TRUE, auto_unbox = TRUE)
它删除了外部方括号,但将第二个元素中的名称转换为formName.1,user_id.1,rows.1,如下所示:
{
"formName": "test_title",
"user_id": "test_userid",
"rows": [
{
"row": 0
}
],
"formName.1": "test_title2",
"user_id.1": "test_userid2",
"rows.1": [
{
"row": 0
}
]
}
但这是我需要的
{
"formName": "test_title",
"user_id": "test_userid",
"rows": [
{
"row": 0
}
],
"formName": "test_title2",
"user_id": "test_userid2",
"rows": [
{
"row": 0
}
]
}
也就是说,第二个JSON元素中的formName、user_ud和rows不追加“.1”
任何建议将不胜感激!
3条答案
按热度按时间klsxnrf11#
这似乎是可行的(丑陋但简单):
由于某些原因,auto_unbox=T不起作用:
uqcuzwp82#
编辑JSON。您可以使用
gsub
或stringr
来执行此操作。如果你使用stringr
函数,它将丢失它的"json"
类,但你可以把它放回去:我将留给您编写适当的正则表达式来进行所需的替换。
c0vxltue3#
它现在真的起作用了。Auto_Unbox对我很有用。