如何用JavaScript分割OBX段`分隔内容并映射至JSON字段
解决HL7消息转JSON的药物拆分问题
修改思路
核心是把OBX.5.1中用反引号()分隔的药物名称拆分成单个条目,再逐个映射到drugs`数组里,同时兼容任意数量的OBX段和每个段内的药物数量:
- 提前初始化
drugs数组,避免未定义报错 - 对符合条件的OBX段,用
split('')`拆分药物名称字符串 - 遍历拆分后的每个药物名称,创建独立的
drugName对象并添加到数组
修改后的代码
// 初始化drugs数组,避免未定义问题 tmp['order'] = tmp['order'] || {}; tmp['order']['drugs'] = []; for each (seg in msg..OBX) { var obx2_1 = seg['OBX.2']['OBX.2.1'].toString().trim(); var obx5_1 = seg['OBX.5']['OBX.5.1'].toString().trim(); if (obx2_1 === 'CE') { // 跳过空值或NONE的情况 if (obx5_1 && obx5_1 !== 'NONE') { // 用反引号拆分药物名称 var drugNames = obx5_1.split('`'); // 遍历每个药物名称,添加到drugs数组 for each (name in drugNames) { if (name.trim()) { // 过滤空字符串(避免拆分后可能的空条目) tmp['order']['drugs'].push({ 'drugName': name.trim() }); } } } } else if (obx2_1 === 'SpecInstruc') { tmp['order']['comments'] = obx5_1; } }
关键改动说明
- 初始化数组:提前创建
tmp['order']['drugs']为数组,用push方法添加元素,不用手动维护计数器drg,更简洁可靠 - 拆分字符串:用
split('')`把OBX.5.1的内容拆分成单个药物名称数组 - 过滤空值:添加了空字符串过滤,避免拆分后出现空的
drugName条目 - 类型匹配:用严格相等
===代替match和重复的toString()调用,逻辑更清晰
测试示例结果
针对你提供的两个OBX段:
OBX|1|CE|2643^MED LIST&PRESCRIBED MEDICATIONS^||VYVANSE`RITALIN`CONCERTA`VIVITROL`BRIXADI`SUBLOCADE OBX|1|CE|2641^MED LIST&PRESCRIBED MEDICATIONS^||AMBIEN`XANAX
最终生成的JSON结构如下:
{ "order": { "drugs": [ {"drugName": "VYVANSE"}, {"drugName": "RITALIN"}, {"drugName": "CONCERTA"}, {"drugName": "VIVITROL"}, {"drugName": "BRIXADI"}, {"drugName": "SUBLOCADE"}, {"drugName": "AMBIEN"}, {"drugName": "XANAX"} ] } }
内容的提问来源于stack exchange,提问作者RNG2555
相关产品推荐
相关产品推荐

