数据生成实体类解决方案
直接将xml
导入到Studio
里即可。下载文件连接:
CSDN
链接- 阿里云盘
简介
- 在我们做接口时,都会遇到各种格式的数据文档,每次都要解析文档,拆分数据、并按需要保存到我们自己的表结构中。
- 如果内容很复杂,层次结构多,手动编写成是实体类对于开发来说工作量还是比较大的。
- 基于此,笔者通过这篇文章介绍一下适合于
IRIS
的数据生成实体类的使用方法,类似于Java
框架Lombok
,fastjson
,GsonFormat
的功能。
工作原理
- 解析数据结构。
- 根据数据结构生成对应实体类。
- 将数据保存到实体类对象。
- 将实体类数据输出为对应数据结构。
解析JSON
生成实体类
示例JSON
消息
{
"problems": [{
"Diabetes": [{
"medications": [{
"medicationsClasses": [{
"className": [{
"associatedDrug": [{
"name": "asprin",
"dose": "",
"strength": "500 mg"
}]
}],
"className2": [{
"associatedDrug": [{
"name": "asprin",
"dose": "",
"strength": "500 mg"
}]
}]
}]
}],
"labs": [{
"missing_field": "missing_value"
}]
}],
"Asthma": [{}]
}]
}
解析JSON
核心方法:
ClassMethod Json2EntityClass(json As %String, className As %String) As %Status
其中:
json
- 传入的json
字符串或json
对象。className
- 生成的类的完全限定名,包名 + 类名。
调用示例:
w ##class(Util.GenerateClassUtils).Json2EntityClass(##class(Util.GenerateClassUtils).JsonDemo(), "M.EntityClass.Demo")
USER>w ##class(Util.GenerateClassUtils).Json2EntityClass(##class(Util.GenerateClassUtils).JsonDemo(), "M.EntityClass.Demo")
在2023-07-02 16:38:05上启动了编译
编译类 M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses.className.associatedDrug
正在编译表 M_EntityClass_Demo_problems_Diabetes_medications_medicationsClasses_className.associatedDrug
正在编译routine M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses.className.associatedDrug.1
0.077s中已成功完成编译.
在2023-07-02 16:38:05上启动了编译
编译类 M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses.className
正在编译表 M_EntityClass_Demo_problems_Diabetes_medications_medicationsClasses.className
正在编译routine M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses.className.1
0.086s中已成功完成编译.
在2023-07-02 16:38:05上启动了编译
编译类 M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses.className2.associatedDrug
正在编译表 M_EntityClass_Demo_problems_Diabetes_medications_medicationsClasses_className2.associatedDrug
正在编译routine M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses.className2.associatedDrug.1
0.100s中已成功完成编译.
在2023-07-02 16:38:05上启动了编译
编译类 M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses.className2
正在编译表 M_EntityClass_Demo_problems_Diabetes_medications_medicationsClasses.className2
正在编译routine M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses.className2.1 0.075s中已成功完成编译.
在2023-07-02 16:38:05上启动了编译
编译类 M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses
正在编译表 M_EntityClass_Demo_problems_Diabetes_medications.medicationsClasses
正在编译routine M.EntityClass.Demo.problems.Diabetes.medications.medicationsClasses.1
0.078s中已成功完成编译.
在2023-07-02 16:38:06上启动了编译
编译类 M.EntityClass.Demo.problems.Diabetes.medications
正在编译表 M_EntityClass_Demo_problems_Diabetes.medications
正在编译routine M.EntityClass.Demo.problems.Diabetes.medications.1
0.086s中已成功完成编译.
在2023-07-02 16:38:06上启动了编译
编译类 M.EntityClass.Demo.problems.Diabetes.labs
正在编译表 M_EntityClass_Demo_problems_Diabetes.labs
正在编译routine M.EntityClass.Demo.problems.Diabetes.labs.1
0.070s中已成功完成编译.
在2023-07-02 16:38:06上启动了编译
编译类 M.EntityClass.Demo.problems.Diabetes
正在编译表 M_EntityClass_Demo_problems.Diabetes
正在编译routine M.EntityClass.Demo.problems.Diabetes.1
0.078s中已成功完成编译.
在2023-07-02 16:38:06上启动了编译
编译类 M.EntityClass.Demo.problems.Asthma
正在编译表 M_EntityClass_Demo_problems.Asthma
正在编译routine M.EntityClass.Demo.problems.Asthma.1
0.059s中已成功完成编译.
在2023-07-02 16:38:06上启动了编译
编译类 M.EntityClass.Demo.problems
正在编译表 M_EntityClass_Demo.problems
正在编译routine M.EntityClass.Demo.problems.1
0.083s中已成功完成编译.
在2023-07-02 16:38:06上启动了编译
编译类 M.EntityClass.Demo
正在编译表 M_EntityClass.Demo
正在编译routine M.EntityClass.Demo.1
0.070s中已成功完成编译.
1
将数据保存到实体类中。
ClassMethod SaveJson2Entity(json As %String, className As %String) As %Status
其中:
json
- 传入的json
字符串或json
对象。className
- 生成的类的完全限定名,包名 + 类名。
将实体类转为输出为JSON
。
ClassMethod Entity2Json(className As %String, id As %String) As %Status
其中:
className
- 生成的类的完全限定名,包名 + 类名。id
- 数据唯一标识符。
USER> w ##class(Util.GenerateClassUtils).Entity2Json("M.EntityClass.Demo", 1)
{"problems":[{"Asthma":[{}],"Diabetes":[{"labs":[{"missing_field":"missing_value"}],"medications":[{"medicationsClasses":[{"className":[{"associatedDrug":[{"name":"asprin","strength":"500 mg"}]}],"className2":[{"associatedDrug":[{"name":"asprin","strength":"500 mg"}]}]}]}]}]}]}
{
"problems": [{
"Asthma": [{}],
"Diabetes": [{
"labs": [{
"missing_field": "missing_value"
}],
"medications": [{
"medicationsClasses": [{
"className": [{
"associatedDrug": [{
"name": "asprin",
"strength": "500 mg"
}]
}],
"className2": [{
"associatedDrug": [{
"name": "asprin",
"strength": "500 mg"
}]
}]
}]
}]
}]
}]
}
思考
-
如何解析
HL7
生成实体类 -
如何解析
XML
生成实体类
以上是个人对数据生成实体类的一些理解,由于个人能力有限,欢迎大家提出意见,共同交流。