R语言用jsonlite构造含数组的POST请求JSON体报错如何解决
问题修复方案
错误根源
你提前将cart对应的数组单独序列化为JSON字符串,后续POST方法指定encode="json"时,会将整个请求体再次做JSON序列化,最终cart字段会被转成带转义符的字符串类型,而不是接口要求的数组结构,因此触发类型不匹配报错。
修复代码
不需要手动提前序列化cart参数,直接将构造好的嵌套列表放到请求体的cart字段中,交给POST方法的统一JSON序列化逻辑处理即可:
# 构造cart对应结构,无需提前转JSON cart_args <- list(list( price="200.00", priceWithDiscount="200.00", amount="1.0", nid="123", groupId="123" )) # 完整请求代码 library(httr) answer <- content(POST("https://url.com", body = list( sum = '200', sumDiscount = '200', guid = 'test_26112021', number = 'test_26112021', date = paste0(Sys.time()), bonusAdd = '0', bonusWriteOff = '0', depositAdd = '0', depositWriteOff = '0', cart = cart_args ),encode="json"))
结构验证(可选)
如果需要确认生成的请求体结构是否符合要求,可以运行以下代码打印序列化后的完整JSON:
library(jsonlite) test_body <- toJSON(list( sum = '200', sumDiscount = '200', guid = 'test_26112021', number = 'test_26112021', date = paste0(Sys.time()), bonusAdd = '0', bonusWriteOff = '0', depositAdd = '0', depositWriteOff = '0', cart = cart_args ), auto_unbox = TRUE, pretty = TRUE) print(test_body)
打印结果中cart字段会是预期的数组结构,无多余转义符。
内容的提问来源于stack exchange,提问作者Ivan Bukata
相关产品推荐
相关产品推荐

