在R语言中将列表转换为POST请求体的目标JSON字符串问题
解决方法
针对zed1(嵌套列表)
直接通过jsonlite的参数控制输出格式,无需手动替换括号:
output_goal <- '{ "firstName": "Tim", "lastName": "Jones", "team": { "value":104290, "teamMarket": "Card", "gender": "MALE" }}' zed1 <- list(firstName = 'Tim', lastName = 'Jones', team = list(value = 104290, teamMarket = 'Card', gender = 'MALE')) # 生成无数组包裹的JSON,再添加目标格式的空格并移除换行 output <- jsonlite::toJSON(zed1, auto_unbox = TRUE) output <- gsub("\\n", "", jsonlite::prettify(output)) # 验证匹配 output == output_goal #> TRUE
针对zed2(包含data.frame的列表)
由于data.frame默认会被序列化为JSON数组,需要先将其转为单个列表,再重复上述格式处理:
zed2 <- list(firstName = 'Tim', lastName = 'Jones', team = data.frame(value = 104290, teamMarket = 'Card', gender = 'MALE')) # 将team的data.frame转为单行列表 zed2$team <- as.list(zed2$team[1, ]) # 后续格式处理同zed1 output <- jsonlite::toJSON(zed2, auto_unbox = TRUE) output <- gsub("\\n", "", jsonlite::prettify(output)) output == output_goal #> TRUE
原方法失败原因
- zed1的问题:默认
toJSON输出是紧凑无空格格式,与output_goal的空格布局不匹配;多余的gsub操作完全没必要(zed1的输出本来就没有方括号)。 - zed2的问题:
data.frame会被转成JSON数组,手动用gsub移除方括号属于暴力替换,既容易误操作其他方括号,也解决不了格式空格的差异。
内容的提问来源于stack exchange,提问作者Canovice
相关产品推荐
相关产品推荐

