如何将包含ImagingStudy/Patient的FHIR Bundle序列化为JSON字符串
FHIR Bundle序列化JSON实现方案
FHIR的JSON格式有严格的规范约束,手动拼接很容易出现字段类型错误、必填项缺失、扩展字段格式不符等问题,优先用各语言官方维护的FHIR SDK实现,需根据你使用的FHIR版本(DSTU2、STU3、R4、R4B、R5等)选择对应版本的依赖包,避免版本不兼容问题。
1. 主流语言实现示例
Java(HAPI FHIR库)
- 引入对应FHIR版本的HAPI FHIR依赖,例如R4版本引入
hapi-fhir-structures-r4、hapi-fhir-validation相关包 - 构建Patient、ImagingStudy资源实例并填充对应字段
- 将两个资源添加到Bundle实例中,根据业务场景设置Bundle的type属性(可选值包括document、searchset、collection等)
- 调用JSON Parser完成序列化
// 初始化R4版本上下文 FhirContext ctx = FhirContext.forR4(); // 构造资源、组装Bundle逻辑省略 Bundle bundle = new Bundle(); // 添加Patient、ImagingStudy到bundle的entry数组中 // 序列化,setPrettyPrint设置为false可输出压缩版JSON String jsonStr = ctx.newJsonParser().setPrettyPrint(true).encodeResourceToString(bundle);
Python(fhir.resources库)
- 安装对应FHIR版本的依赖包,例如R4版本执行
pip install fhir.resources~=6.4.0 - 实例化Patient、ImagingStudy对象并赋值属性
- 构造Bundle对象,将两个资源添加到entry列表
- 调用内置json方法完成序列化
from fhir.resources.bundle import Bundle, BundleEntry from fhir.resources.patient import Patient from fhir.resources.imagingstudy import ImagingStudy # 构造资源、属性赋值逻辑省略 patient = Patient(**patient_data) imaging_study = ImagingStudy(**study_data) # 组装Bundle entries = [ BundleEntry(resource=patient), BundleEntry(resource=imaging_study) ] bundle = Bundle(type="searchset", entry=entries) # 序列化,indent参数不传可输出压缩版JSON json_str = bundle.json(indent=2)
C#(Firely .NET FHIR API)
- 安装对应FHIR版本的NuGet包,例如R4版本安装
Hl7.Fhir.R4 - 构建资源实例并组装到Bundle
- 调用FhirJsonSerializer完成序列化
var serializer = new FhirJsonSerializer(new SerializerSettings { Pretty = true }); // 序列化,Pretty设置为false可输出压缩版JSON string jsonStr = serializer.SerializeToString(bundle);
2. 手动构造方案(仅适用于临时测试场景,不推荐生产使用)
注意:该方式需要严格遵循对应FHIR版本的JSON格式规范,所有资源字段必须符合FHIR定义的数据类型,必填字段不可缺失,否则生成的JSON无法被其他FHIR系统正常解析。
- 按照Bundle结构定义构造结构体:resourceType固定为
Bundle,填写对应type属性,entry数组中每个元素的resource字段分别存放Patient和ImagingStudy的完整资源内容 - 使用对应语言的原生JSON序列化方法将结构体转换为字符串即可
注意事项
序列化前建议调用SDK内置的校验方法做一次FHIR格式校验,提前识别不符合规范的字段错误。
内容的提问来源于stack exchange,提问作者knightingale
相关产品推荐
相关产品推荐

