You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:45:02