使用 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 的正确结果?
备注
- documentation 可能有一些线索(我从那里尝试了一些东西但没有成功)
"[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 字符串之间来回多次。
如果我们打开 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 的正确结果?
备注
- documentation 可能有一些线索(我从那里尝试了一些东西但没有成功)
"[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 字符串之间来回多次。