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

如何将法国公共资助项目API的JSON数据转换为规范DataFrame?

解决JSON转数据框并导出CSV的问题

问题背景

需要将法国公共资助项目列表转为CSV文件,已通过API获取JSON数据:

my_url <- "https://aides-territoires.beta.gouv.fr/api/aids/all/"

results <- 
  httr::content(
    httr::GET(my_url),
    as="text",  
    httr::content_type_json(),  
    encoding= "UTF-8"    
  )

尝试手动提取字段转数据框时,出现错误:

Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, :
arguments imply differing number of rows: 1, 2, 0, 3, 4, 11, 7, 5, 15

错误原因是部分字段(如financers、instructors)是嵌套列表/多值数组,直接提取后每个字段的长度不一致,无法构造数据框。

解决方案步骤

1. 正确解析JSON数据

先用jsonlite::fromJSON解析JSON文本,它自带处理嵌套结构的能力:

library(jsonlite)
library(dplyr)

# 解析JSON,flatten参数自动展开嵌套层级
parsed_data <- fromJSON(results, flatten = TRUE)

# 提取API返回的核心项目数据
aids_data <- parsed_data$results

2. 处理多值字段

把包含多个元素的列表型字段(比如资助方、执行方名称)合并为逗号分隔的字符串,保证所有字段长度一致:

aids_data <- aids_data %>%
  mutate(
    financers = sapply(financers, function(x) paste(x$name, collapse = ", ")),
    instructors = sapply(instructors, function(x) paste(x$name, collapse = ", ")),
    programs = sapply(programs, function(x) paste(x$name, collapse = ", ")),
    destinations = sapply(destinations, function(x) paste(x$name, collapse = ", "))
  )

3. 导出为CSV文件

处理完成后直接转为数据框并导出:

# 转为标准数据框(解析后若已是数据框可跳过此步)
aids_df <- as.data.frame(aids_data)

# 导出CSV,保留UTF-8编码避免乱码
write.csv(aids_df, "法国公共资助项目列表.csv", row.names = FALSE, fileEncoding = "UTF-8")

补充说明

  • flatten = TRUE会将嵌套的JSON结构展开为顶层字段(如financers.name),简化后续处理
  • 空值或长度为0的列表会被转为空字符串,不会触发报错
  • 若需要拆分多值字段生成多行数据,可改用tidyr::unnest函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:40:32