You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将R语言data.frame转换为指定结构的JSON数组并嵌入HTML

问题

我在R中创建了如下data.frame:

dataset <- data.frame(
  product = c('2012', '2013', '2014', '2015', '2016', '2017'),
  MilkTea = c(56.5, 82.1, 88.7, 70.1, 53.4, 85.1),
  MatchaLatte = c(51.1, 51.4, 55.1, 53.3, 73.8, 68.7),
  CheeseCocoa = c(40.1, 62.2, 69.5, 36.4, 45.2, 32.5),
  WalnutBrownie = c(25.2, 37.1, 41.2, 18, 33.9, 49.1)
)

需要将其转换为指定结构的JSON数组:

dataset: {
  source: [
    ['product', '2012', '2013', '2014', '2015', '2016', '2017'],
    ['Milk Tea', 56.5, 82.1, 88.7, 70.1, 53.4, 85.1],
    ['Matcha Latte', 51.1, 51.4, 55.1, 53.3, 73.8, 68.7],
    ['Cheese Cocoa', 40.1, 62.2, 69.5, 36.4, 45.2, 32.5],
    ['Walnut Brownie', 25.2, 37.1, 41.2, 18, 33.9, 49.1]
  ]
}

尝试使用jsonlite的toJSON函数:

library(jsonlite)
toJSON(x = dataset, dataframe = "columns", pretty = TRUE)

结果结构不符合需求,请问如何实现目标结构的转换,并将生成的JSON嵌入HTML的<script>标签中用于后续分析?

解决方案

1. 数据结构转换与JSON生成

要得到目标结构,需要先调整数据格式,再用jsonlite生成符合要求的JSON:

步骤1:处理列名

将驼峰式列名(如MilkTea)转换为空格分隔的格式(如Milk Tea):

library(jsonlite)

# 原始数据
dataset <- data.frame(
  product = c('2012', '2013', '2014', '2015', '2016', '2017'),
  MilkTea = c(56.5, 82.1, 88.7, 70.1, 53.4, 85.1),
  MatchaLatte = c(51.1, 51.4, 55.1, 53.3, 73.8, 68.7),
  CheeseCocoa = c(40.1, 62.2, 69.5, 36.4, 45.2, 32.5),
  WalnutBrownie = c(25.2, 37.1, 41.2, 18, 33.9, 49.1)
)

# 驼峰转空格分隔的列名
col_names <- gsub("(?<=[a-z])(?=[A-Z])", " ", colnames(dataset), perl = TRUE)

步骤2:构造目标结构的数据源

将每一列转换为[列名, 值1, 值2, ...]的格式,再组合成source数组:

# 构造source数组的每一行
source_rows <- list(
  # 第一行:product列名 + 年份值
  c(col_names[1], dataset$product),
  # 后续行:处理后的列名 + 对应数值列
  c(col_names[2], dataset$MilkTea),
  c(col_names[3], dataset$MatchaLatte),
  c(col_names[4], dataset$CheeseCocoa),
  c(col_names[5], dataset$WalnutBrownie)
)

# 组装成最终的dataset结构
target_structure <- list(dataset = list(source = source_rows))

步骤3:生成JSON

使用toJSON生成带格式的JSON,注意关闭auto_unbox以保留数组结构:

json_output <- toJSON(target_structure, pretty = TRUE, auto_unbox = FALSE)
print(json_output)

运行后将得到与目标结构一致的JSON。

2. 嵌入HTML的<script>标签

可以直接拼接字符串生成<script>标签,或使用htmltools包简化操作:

方法1:直接字符串拼接

# 生成包含JSON的script标签内容
script_tag <- paste0("<script>var ", json_output, ";</script>")

# 将内容写入HTML文件
writeLines(script_tag, "data_output.html")

方法2:使用htmltools包

library(htmltools)

# 生成HTML的script元素
html_element <- HTML(paste0("<script>var ", json_output, ";</script>"))

# 保存为HTML文件
save_html(html_element, "data_output.html")

生成的HTML文件中,JSON数据会被定义为全局变量dataset,可直接在前端代码中调用。

内容的提问来源于stack exchange,提问作者neves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:35:07