我正在使用OpenCPU和R创建一个Web API,它接受一些输入并从数据库返回topoJSON文件,以及一些其他信息。 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"]}}
这只是文件的开头(我用&#34; 0&#34;替换了实际地图),正如您所看到的,括号出现在&#34;拓扑&#34;和&#34; 0&#34;。或者,如果我只是把它作为一个字符串,我最终得到这个混乱:
> toJSON(s)
["{\"type\":\"Topology\",\"objects\":{\"0000595ab81ec4f34__csv\": \"0\"}}"]
有没有办法解决这个问题,以便我只获得逐字字符串,但没有引号和反引号?
编辑:请注意,因为我使用OpenCPU,输出需要来自toJSON(所以不幸的是不能使用其他功能),我不能进行任何后处理。
答案 0 :(得分:1)
看起来你只想要值而不是向量。设置auto_unbox=TRUE
将长度为一的向量转换为标量值
toJSON(fromJSON(s), auto_unbox = TRUE)
# {"type":"Topology","objects":{"map":"0"}}
对我来说打印时没有转义(使用jsonlite_1.5
)。也许您使用的是jsonlite
的旧版本。您也可以使用cat()
来打印结果。当你这样做时,你不会看到斜杠。
cat(toJSON(fromJSON(s), auto_unbox = TRUE))