如何在Quarto/R Markdown中执行JSON字符串内嵌的R代码?
可行,两种实现方法
你可以通过以下两种方式让JSON中内嵌的R代码被执行:
方法一:用knitr::knit()直接渲染字符串
Quarto/R Markdown中的r ...代码块原本就是由knitr处理的,直接调用knitr::knit()函数就能解析并执行JSON字符串里的内嵌R代码:
示例代码
library(jsonlite) library(knitr) # 读取JSON文件 info <- read_json("report_text.json")
直接在文档中渲染:r knit(text = info$about$title)
或者用代码块输出(适合批量处理):
cat(knit(text = info$about$title))
方法二:提取并执行指定R代码片段
如果需要更灵活地控制代码执行逻辑,可以用正则表达式提取r ...中的代码,执行后替换原字符串:
示例代码
library(jsonlite) info <- read_json("report_text.json") # 提取JSON文本中的R代码片段 title_text <- info$about$title r_code <- gsub(".*`r (.*)`", "\\1", title_text) # 执行代码并替换原文本中的代码块 rendered_title <- sub("`r .*`", eval(parse(text = r_code)), title_text)
输出渲染后的内容:r rendered_title
或者用代码块输出:
cat(rendered_title)
注意事项
- 确保JSON文件中的R代码是可信的,避免执行未授权的恶意代码
- 如果JSON文本中包含多个
r ...代码块,方法一的knit()会自动处理所有块;方法二需要循环遍历每个匹配项来逐一替换执行
内容的提问来源于stack exchange,提问作者ZRoss
相关产品推荐
相关产品推荐

