使用V8$eval在R中解析JSON?
如果我们打开chrome开发者控制台(command+option+j),进入javascript控制台,然后输入使用V8$eval在R中解析JSON?,r,v8,R,V8,如果我们打开chrome开发者控制台(command+option+j),进入javascript控制台,然后输入 JSON.parse('{“name”:“John”}'); 返回{name:“John”} 但是当我们使用V8在R中运行相同的javascript时(使用示例),它会返回不同的结果 library(V8) ctx <- v8() ctx$eval("JSON.parse('{\"name\":\"John\"}');&qu
JSON.parse('{“name”:“John”}');
返回{name:“John”}
但是当我们使用V8在R中运行相同的javascript时(使用示例),它会返回不同的结果
library(V8)
ctx <- v8()
ctx$eval("JSON.parse('{\"name\":\"John\"}');")
# "[object Object]"
库(V8)
ctx“[object object]”
是在JavaScript中对JSON对象调用toString
的结果ctx$eval
返回正确的JavaScript对象,但在将其传递给R之前,将调用其toString
JavaScript方法
但是,您仍然能够按预期使用该对象-您只需要将其分配给一个变量,例如
ctx$eval("let result = JSON.parse('{\"name\":\"John\"}');")
如果您想将JSON转换成R,那么通过V8是一个巨大的迂回,因为R和V8之间的通信已经是JSON编码的。改用jsonlite::fromJSON
尽管如此,我想你还是可以的
ctx$get("result")
…它在JavaScript中内部调用JSON.stringify
,然后在R中调用jsonlite::fromJSON
,因此您在对象和JSON字符串之间来回移动了好几次。您是否尝试过ctx$eval(“JSON.parse(“{”name\“:“John\”)”)
(注意缺少的;
)@sdgfsdh感谢您的建议。我试过了,它返回了“[object object]”
(和;
)我明白了。我唯一没有深入研究代码的建议是:ctx$eval((()=>JSON.parse({\'name\':\'John\'}'))()”
@sdgfsdh谢谢。我不知道足够多的javascript来理解它的功能,但不幸的是,结果也是“[object object]”
谢谢你的回答。我将按照您的建议使用$get
。注意:我绕道而行是有原因的,只有当你真的很无聊并且想挑战时,才值得一读:-)