如何防止 toJSON 在 R 中引用我的 JSON 字符串?



>我正在使用OpenCPU和R创建一个Web API,该API接收一些输入并从数据库返回拓扑JSON文件以及其他一些信息。OpenCPU 会自动通过 toJSON 推送输出,从而产生引用 JSON 的 JSON 输出(即 topoJSON(。这显然并不理想 - 特别是因为它随后会变得非常混乱,带有反引号(\"(。我尝试使用 fromJSON 将其转换为 R 对象,然后可以转换回来(效率非常低(,但它返回的语法略有不同,结果是它不起作用。

我觉得应该有某种方法可以将字符串转换为其他类型的对象,从而导致 toJSON 调用不同的处理程序,告诉它不要管它,但我无法弄清楚如何做到这一点。

> s <- '{"type":"Topology","objects":{"map": "0"}}'
> fromJSON(s)
$type
[1] "Topology"
$objects
$objects$map
[1] "0"
> toJSON(fromJSON(s))
{"type":["Topology"],"objects":{"map":["0"]}} 

这只是文件的开头(我用"0"替换了实际地图(,如您所见,"拓扑"和"0"周围出现了括号。或者,如果我只是将其保留为字符串,我最终会得到这个混乱:

> toJSON(s)
["{"type":"Topology","objects":{"0000595ab81ec4f34__csv": "0"}}"] 

有没有办法解决这个问题,以便我只得到逐字字符串但没有引号和反引号?

编辑:请注意,因为我使用的是OpenCPU,所以输出需要来自toJSON(所以不幸的是,没有其他函数可以使用(,我不能做任何后处理。

似乎你只想要值而不是向量。设置auto_unbox=TRUE以将长度 1 向量转换为标量值

toJSON(fromJSON(s), auto_unbox = TRUE)
# {"type":"Topology","objects":{"map":"0"}} 

这确实打印而不会为我逃脱(使用jsonlite_1.5(。也许您使用的是旧版本的jsonlite。您还可以通过使用cat()打印结果来解决此问题。执行此操作时,您不会看到斜杠。

cat(toJSON(fromJSON(s), auto_unbox = TRUE))

您可以手动unbox相关条目:

library(jsonlite)
s <- '{"type":"Topology","objects":{"map": "0"}}'
j <- fromJSON(s)
j$type <- unbox(j$type)
j$objects$map <- unbox(j$objects$map)
toJSON(j)
# {"type":"Topology","objects":{"map":"0"}} 

最新更新