JSON转换用R包jsonlite

问题描述 投票:0回答:2

我必须将 JSON 字符串转换为 R 对象,添加一些信息并将其转换回 JSON 字符串。

我设法在简单示例中使用了 jsonlite 包,但现在我遇到了“不太复杂”字符串的问题

{"A":["a"], "B":true}
,即如果我这样做:

jsonlite::toJSON (jsonlite::fromJSON ('{"A":["a"], "B":true}') )

然后我得到:

{"A":["a"], "B":[true]}

这与初始字符串不同,因为第二个值已放入向量中。

我的问题是: 有没有办法让 jsonlite 回到初始字符串?

r json jsonlite
2个回答
0
投票

你将不得不改变对象。 R 中几乎所有的东西都是向量。所以当你有字符值和逻辑值时,它们都是向量。在制作 JSON 字符串时,您可以将其设置为长度为 1 的“自动拆箱”向量以不使用数组括号,或者让所有向量都使用数组括号。由于您希望字符串值和逻辑值具有不同的行为,因此

toJSON
无法猜测您想要什么。

您可以使用

unbox()
功能更明确

jsonlite::toJSON(list(A = "a", B = jsonlite::unbox(TRUE)))
# {"A":["a"],"B":true} 

这里我们明确拆箱

B
值。


0
投票

对于这种特定情况,您可以将 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} 
© www.soinside.com 2019 - 2024. All rights reserved.