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

如何提取R数据框中JSON列的特定字段值?

处理R数据框中的JSON列提取问题

我来帮你搞定这个需求!在R里提取JSON格式列中的指定内容,用jsonlite包就能轻松实现,下面是具体的实现步骤和代码:

步骤1:准备环境(加载必要的包)

首先确保你安装了jsonlite和dplyr(用dplyr的管道语法会更简洁,当然用基础R也可以):

install.packages(c("jsonlite", "dplyr", "purrr")) # 首次使用需要安装
library(jsonlite)
library(dplyr)
library(purrr)

步骤2:构造原始数据框(模拟你的数据)

先把你提供的原始数据转换成R数据框:

df <- data.frame(
  item_number = 1:2,
  question = c('{"jsonTypeDefinition":"gameSelector","type":"OpenAnswer","question":{"mediaType":"text","content":"0 x 1"}}',
               '{"jsonTypeDefinition":"gameSelector","type":"OpenAnswer","question":{"mediaType":"text","content":"1 x 1"}}'),
  answer_options = c('{"layout":"Numpad","mediaType":"textAnswerOptions","answerOptions":["0"]}',
                     '{"layout":"Numpad","mediaType":"textAnswerOptions","answerOptions":["1"]}'),
  correct_answer = c(0, 0),
  stringsAsFactors = FALSE
)

步骤3:提取JSON中的指定内容

用mutate结合map_chr(来自purrr)来逐行解析JSON并提取目标内容:

df_processed <- df %>%
  mutate(
    # 从question列的JSON中提取question.content字段
    question = map_chr(question, ~ fromJSON(.)$question$content),
    # 从answer_options列的JSON中提取answerOptions数组的第一个元素
    answer_options = map_chr(answer_options, ~ fromJSON(.)$answerOptions[1])
  )

如果习惯用基础R语法,也可以这样写:

# 基础R实现版本
df$question <- sapply(df$question, function(x) fromJSON(x)$question$content)
df$answer_options <- sapply(df$answer_options, function(x) fromJSON(x)$answerOptions[1])

步骤4:查看处理后的结果

运行完上面的代码后,打印数据框就能得到你想要的输出:

print(df_processed)
#   item_number question answer_options correct_answer
# 1           1   0 x 1              0              0
# 2           2   1 x 1              1              0

补充说明

  • fromJSON()函数会将JSON字符串转换成R的列表/数据结构,方便我们提取嵌套字段;
  • 因为你提到answer_options的子集始终只有一个选项,所以直接取answerOptions[1]就可以拿到目标值;
  • 如果后续遇到有多个选项的情况,只需要调整提取逻辑(比如转成向量或者其他格式)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:15:27