R中使用jsonlite包生成带嵌套方括号结构的JSON字符串的问题
完全可以通过jsonlite原生功能实现,不需要手动用paste0拼接字符串。你提到的方括号是JSON中的**数组(Array)**类型,只要调整R列表的嵌套结构即可匹配要求。
调整后的代码实现
你只需要在需要生成数组的位置,额外套一层list()即可:
# Load packages ---------------------------------------------- library(tidyverse) library(httr) library(jsonlite) # 调整后的嵌套列表:需要生成数组的位置额外套一层list() my_list <- list( # 最外层套list,对应整个JSON外侧的[] list( grouping = 2, locationID = 4, metricID = 1, startDate = '2021-10-31', endDate = '2021-10-31', # filters额外套一层list,对应filters外侧的[] filters = list( list( id = 1, # value额外套一层list,对应value外侧的[] value = list(6) ) ) ) ) # 转换为JSON,参数保持不变即可 my_JSON <- jsonlite::toJSON(my_list, auto_unbox = TRUE, pretty = TRUE) # 查看输出 my_JSON
转换后输出结果(和你预期的格式完全一致)
[ { "grouping": 2, "locationID": 4, "metricID": 1, "startDate": "2021-10-31", "endDate": "2021-10-31", "filters": [ { "id": 1, "value": [ 6 ] } ] } ]
原理说明
- 直接写
list(id = 1, value = 6)会被jsonlite识别为单个JSON对象(仅用大括号{}包裹) - 写成
list(list(id = 1, value = 6))相当于R列表内嵌套了一个子列表,会被识别为包含1个对象的JSON数组,自动添加方括号[] - 不建议手动拼接字符串,遇到特殊字符(比如引号、转义符)时极易出现格式错误,用原生列表结构转换是最稳妥的方案
内容的提问来源于stack exchange,提问作者Chris Kiniry
相关产品推荐
相关产品推荐

