使用httr::POST发送JSON时单元素向量解包问题的咨询
解决httr POST单元素向量JSON编码丢失数组括号的问题
问题原因
httr的encode = "json"依赖jsonlite包处理JSON编码,默认会将长度为1的向量自动"解包"为单个值,导致原本应该是数组格式的[100]变成了100,不符合API的数组格式要求。
解决方案
用I()函数(即AsIs类)包裹需要保留数组格式的单元素向量,明确告诉jsonlite不要简化该向量的结构。
修改后的代码
my_list <- list( list(ids = I(c(100))) ) names(my_list) <- "Example" responseList <- httr::POST(url = url_endpoint, body = my_list, encode = "json", httr::verbose())
验证结果
此时verbose输出的JSON内容会是{"Example":{"ids":[100]}},数组括号被保留,符合API的格式要求。
替代方案(手动编码JSON)
如果需要更精细控制JSON编码,也可以用jsonlite的toJSON函数手动生成JSON字符串,设置auto_unbox = FALSE禁止自动解包,再通过httr发送:
library(jsonlite) my_list <- list( list(ids = c(100)) ) names(my_list) <- "Example" # 手动生成JSON,保留数组结构 my_json <- toJSON(my_list, auto_unbox = FALSE) responseList <- httr::POST(url = url_endpoint, body = my_json, encode = "raw", httr::verbose())
内容的提问来源于stack exchange,提问作者KidLu
相关产品推荐
相关产品推荐

