r语言 - 使用 toJSON 将未引用的 JavaScript 传递给 Highcharts



使用 shiny 和 rCharts 创建仪表板应用程序,我需要将原始 javascript(而不是字符串)传递给 Highcharts 对象。

给定此列表

series <- list(data = list(c(0, 0), c(100, 0), c(100, 100)),
               type = 'polygon',
               color = 'Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0.5).get()')

我需要生成这个 JSON

{series:[{
          data: [[0, 0], [100, 0], [100, 100]],
          type: 'polygon',
          color: Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0.5).get()
        }]
}

但我找不到任何方法来阻止 RJSONIO 或 jsonlte 引用颜色属性的值

shiny 提供了 JS() 来包装文字 JavaScript,但 RJSONIO 忽略了它,jsonlite 抱怨类 JS_EVAL 缺少 asJSON 方法。

有没有其他方法可以选择性地防止引用 toJSON 输出?

您需要 rCharts 作者的支持。两种方法:

  1. 简单的方法:使用 htmlwidgets 框架。然后你需要做的就是把你的JS代码放在htmlwidgets::JS()。JS代码将被自动保留和评估。
  2. 更难的方法:重塑我们在htmlwidgets中所做的工作。我不明白为什么有人想这样做。无论如何,如果你关心血腥的细节,我们所做的基本上是:
    1. JS()向字符串添加一个类JS_EVAL,我们找出这些字符串的位置(例如 series[2].color );
    2. 在 JavaScript 端,查找并eval()这些字符串;

你不能用json库做到这一点的原因是你的代码显然不是JSON,而是JavaScript。一个技巧是将文字字符串视为 json:

color <- 'Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0.5).get()'
class(color) <- 'json'
series <- list(data = list(c(0, 0), c(100, 0), c(100, 100)),
   type = 'polygon',
   color = color)
jsonlite::toJSON(series, json_verbatim = TRUE, auto_unbox = TRUE)

相关内容

  • 没有找到相关文章

最新更新