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

如何将含命名嵌套列表的Dataframe转换为HL7-FHIR标准JSON

从R生成符合HL7-FHIR 4.0.1的Patient JSON

目标JSON结构

需要生成的FHIR Patient资源结构如下:

{
  "resourceType": "Patient",
  "name": [
    { "family": "Simpson", "given": [ "Homer", "Jay" ] }
  ],
  "gender": "male",
  "birthDate": "1956-5-12"
}

问题分析

你尝试用Base R的data.frame和tibble构建数据结构时,都因为表格型数据与FHIR嵌套JSON结构不匹配,导致转换后的JSON不符合要求:

  1. Base R data.frame:将嵌套列表拆分为多行,转换后出现字段重复、结构错乱。
  2. tibble:将given定义为tibble,导致转换后变成键值对对象而非数组。

解决方案

方案1:直接构建嵌套列表(推荐)

FHIR JSON是层级嵌套结构,直接用R的列表来映射最贴合,无需通过DataFrame中转:

library(jsonlite)

# 构建符合FHIR结构的嵌套列表
patient_list <- list(
  resourceType = "Patient",
  name = list(
    list(
      family = "Simpson",
      given = c("Homer", "Jay")
    )
  ),
  gender = "male",
  birthDate = "1956-05-12"  # 建议遵循FHIR日期格式规范:YYYY-MM-DD
)

# 转换为JSON,auto_unbox=TRUE自动处理长度为1的向量,pretty=TRUE格式化输出
patient_json <- toJSON(patient_list, auto_unbox = TRUE, pretty = TRUE)
cat(patient_json)

输出结果完全符合目标结构。

方案2:从DataFrame转换(若必须使用DataFrame)

如果需要基于DataFrame生成,需确保嵌套结构以列表形式存储在单元格中,而非拆分的表格:

library(jsonlite)
library(tibble)

# 构建单行tibble,name列存储嵌套列表
patient_df <- tibble(
  resourceType = "Patient",
  name = list(
    list(
      family = "Simpson",
      given = c("Homer", "Jay")
    )
  ),
  gender = "male",
  birthDate = "1956-05-12"
)

# 转换为JSON
patient_json <- toJSON(patient_df, auto_unbox = TRUE, pretty = TRUE)
cat(patient_json)

该方法生成的JSON同样符合FHIR标准。

错误原因说明

  • Base R data.frame问题:data.frame本质是列向量集合,会将I(list(family=..., given=...))解析为两列(family和given),进而生成两行数据,导致JSON转换时字段重复。
  • tibble问题:你将given定义为tibble("Homer", "Jay"),这会创建一个带默认列名的表格,转换为JSON时就变成了键值对对象,而FHIR要求given是字符串数组,应直接用向量c("Homer", "Jay")存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:35:21