在R中,将列表转换为POST请求主体的字符串化JSON


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'))
output <- jsonlite::toJSON(zed1)
output <- gsub('\[', '', output)
output <- gsub('\]', '', output)
output == output_goal
> FALSE

zed2 <- list(firstName = 'Tim', lastName = 'Jones', team = data.frame(value = 104290, teamMarket = 'Card', gender = 'MALE'))
output <- jsonlite::toJSON(zed2)
output <- gsub('\[', '', output)
output <- gsub('\]', '', output)
output == output_goal
> FALSE

我们的目标是将zed1,zed2中的任意一个转换为字符串output_goal。到目前为止,我们已经尝试使用jsonlite::toJSON,然后使用gsub来删除括号。我相信我们正在与转义字符作斗争,但我不确定还有什么可以尝试让这些字符串匹配。

看一下auto_unbox参数:

auto_unbox: Automatically unbox()所有长度为1的原子向量

jsonlite::toJSON(zed1, auto_unbox = TRUE)
# {"firstName":"Tim","lastName":"Jones","team":{"value":104290,"teamMarket":"Card","gender":"MALE"}} 

注意文档中的警告:

通常避免这种情况更安全,而是使用unbox()函数将单个元素拆箱。一个例外是类AsIs的对象(即包装在I()中)不会自动解盒。这是一种将单个值标记为长度为1的数组的方法。

根据实际数据的复杂性,您可能希望对长度为1的元素使用unbox()函数。

相关内容

  • 没有找到相关文章

最新更新