我必须将 JSON 字符串转换为 R 对象,添加一些信息并将其转换回 JSON 字符串。
我设法在简单示例中使用了 jsonlite 包,但现在我遇到了“不太复杂”字符串的问题
{"A":["a"], "B":true}
,即如果我这样做:
jsonlite::toJSON (jsonlite::fromJSON ('{"A":["a"], "B":true}') )
然后我得到:
{"A":["a"], "B":[true]}
这与初始字符串不同,因为第二个值已放入向量中。
我的问题是: 有没有办法让 jsonlite 回到初始字符串?
你将不得不改变对象。 R 中几乎所有的东西都是向量。所以当你有字符值和逻辑值时,它们都是向量。在制作 JSON 字符串时,您可以将其设置为长度为 1 的“自动拆箱”向量以不使用数组括号,或者让所有向量都使用数组括号。由于您希望字符串值和逻辑值具有不同的行为,因此
toJSON
无法猜测您想要什么。
您可以使用
unbox()
功能更明确
jsonlite::toJSON(list(A = "a", B = jsonlite::unbox(TRUE)))
# {"A":["a"],"B":true}
这里我们明确拆箱
B
值。
对于这种特定情况,您可以将 toJSON 的
auto_unbox
设置为 TRUE,将 fromJSON 的simplifyVector
设置为 FALSE。
jsonlite::toJSON (x = jsonlite::fromJSON ('{"A":["a"], "B":true}',
simplifyVector = FALSE),
auto_unbox = TRUE)
#{"A":["a"],"B":true}