使用V8$eval在R中解析JSON?

使用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

如果我们打开chrome开发者控制台(command+option+j),进入javascript控制台,然后输入

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
。注意:我绕道而行是有原因的,只有当你真的很无聊并且想挑战时,才值得一读:-)