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()
函数。