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

如何在R中将指定列嵌套为fields结构并生成目标JSON

R语言实现DataFrame嵌套字段并生成指定格式JSON

问题描述

需要基于以下Schema生成JSON文件:

col1,
col2,
fields{name, value}

现有包含col1至col4的DataFrame,要求将col3和col4嵌套到fields数组中,每个列对应一个对象:对象的name为列名,value为对应行的值。

尝试了以下代码但未实现预期嵌套效果:

df <- data.frame(
  col1 = c(seq(1, 5)),
  col2 = c(seq(6, 10)),
  col3 = c("a", "b", "c", "d", "e"),
  col4 = c(seq(100, 104))
) |>
  nest(fields = c(col3, col4))

# format to json
cat(rjson::toJSON(unname(split(df, 1:nrow(df)))))

期望生成的JSON格式示例:

{  
  "col1":1,
  "col2":6,
  "fields":[    
    {      
      "name":"col3",
      "value":"a"
    },
    {      
      "name":"col4",
      "value":100
    }
  ]
}

解决方案

直接使用nest()会把col3和col4嵌套成子DataFrame,而非name-value结构的数组。你需要将每行的目标列转换为指定结构的嵌套列表,以下是两种实现方式:

方式一:固定列名实现

适合列名固定的场景,代码直观易懂:

library(dplyr)
library(purrr)
library(rjson)

df <- data.frame(
  col1 = seq(1, 5),
  col2 = seq(6, 10),
  col3 = c("a", "b", "c", "d", "e"),
  col4 = seq(100, 104)
)

# 转换每行的col3和col4为fields数组
result_df <- df |>
  rowwise() |>
  mutate(fields = list(
    list(list(name = "col3", value = col3),
         list(name = "col4", value = col4))
  )) |>
  ungroup() |>
  select(col1, col2, fields)

# 生成JSON并输出
cat(rjson::toJSON(unname(split(result_df, 1:nrow(result_df)))))

方式二:动态列实现

适合需要处理任意多列的场景,无需硬编码列名:

library(dplyr)
library(purrr)
library(rjson)

df <- data.frame(
  col1 = seq(1, 5),
  col2 = seq(6, 10),
  col3 = c("a", "b", "c", "d", "e"),
  col4 = seq(100, 104)
)

# 定义需要嵌套的列(这里取第3到第4列)
target_cols <- names(df)[3:4]

result_df <- df |>
  rowwise() |>
  mutate(fields = list(
    # 遍历目标列,生成name-value结构的对象
    map(target_cols, ~ list(name = ., value = get(.)))
  )) |>
  ungroup() |>
  select(col1, col2, fields)

# 生成JSON并输出
cat(rjson::toJSON(unname(split(result_df, 1:nrow(result_df)))))

代码关键说明

  • rowwise():让后续mutate操作按行独立执行,确保每行生成对应的fields数组。
  • list(...)/map(...):将目标列的列名和值包装成指定的name-value结构,再组合成数组。
  • ungroup():取消行分组,恢复DataFrame的常规操作模式。
  • select():仅保留需要的列,避免多余数据混入最终JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:51:26