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

Parse JSON in R using V8 $eval?

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

JSON.parse('{ "name":"John"}');

其中 returns {name: "John"}

但是当我们在 R 中使用 V8 运行 相同的 javascript(使用示例 here)时,它 return 是不同的结果

library(V8)
ctx <- v8()
ctx$eval("JSON.parse('{\"name\":\"John\"}');")

# "[object Object]"

我们怎样才能得到 V8::eval() 到 return 的正确结果?

备注

"[object Object]" 是对 JavaScript 中的 JSON 对象调用 toString 的结果。 ctx$eval returns 正确的 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 字符串之间来回多次。