Node.js 數(shù)據(jù)格式同時支持JSON和HL7

Node.js 數(shù)據(jù)格式同時支持JSON和HL7

一個正常的HL7格式的數(shù)據(jù)大概長這樣:

MSH|^~\&|HIS|SFPH|NIS|SFPH|20140626114850.755|N|ZK~S^Z01^ZKS_Z01|NISGetHisDept-20140626114850755|P|2.7
Z01|0|部門ID|部門名稱|部門性質(zhì)|實(shí)有床位|開放床位數(shù)|預(yù)繳金下限颜武,第一次預(yù)繳金的下限|催款下限,病區(qū)提示催款的下限|記賬下限市咽,病區(qū)病人實(shí)際余額的下限|允許欠費(fèi)上限|對應(yīng)門診科室|對應(yīng)住院科室|病區(qū)急診床位數(shù)|科室共享床位數(shù)|拼音首碼|五筆首碼|操作人|操作時間

經(jīng)過一番閱讀HL7的標(biāo)準(zhǔn),成功地總結(jié)出HL7就是一堆段頭領(lǐng)著一幫段信息纵寝,一級隔斷用|舆绎,二級隔斷用^,三級隔斷用~秸歧,別的就隨意了厨姚。具體內(nèi)部消息格式自己定義。于是键菱,在當(dāng)下階段谬墙,先把HL7與JSON格式之間的互相轉(zhuǎn)換做出來就好,以后遇到正式的業(yè)務(wù)邏輯再做相應(yīng)更改经备。

let hl7Body = {};
let hl72Json = (hl7Str) => {
    let payLoadArray = hl7Str.split('\r\n');
    for (let countX = 0; countX < payLoadArray.length; countX++) {
        hl7Body[payLoadArray[countX].substring(0, 3)] = payLoadArray[countX].substring(4).split('|');
        for (let countY = 0; countY < hl7Body[payLoadArray[countX].substring(0, 3)].length; countY++) {
            // console.log(hl7Body[payLoadArray[countX].substring(0, 3)][countY] + ':' + hl7Body[payLoadArray[countX].substring(0, 3)][countY].indexOf('^'));
            if (hl7Body[payLoadArray[countX].substring(0, 3)][countY].indexOf('^') !== -1 && ((payLoadArray[countX].substring(0, 3) !== 'MSH') || (countY !== 0))) {
                hl7Body[payLoadArray[countX].substring(0, 3)][countY] = hl7Body[payLoadArray[countX].substring(0, 3)][countY].split('^');
                if (Array.isArray(hl7Body[payLoadArray[countX].substring(0, 3)][countY])) {
                    for (let countZ = 0; countZ < hl7Body[payLoadArray[countX].substring(0, 3)][countY].length; countZ++) {
                        if (hl7Body[payLoadArray[countX].substring(0, 3)][countY][countZ].indexOf('~') !== -1) {
                            hl7Body[payLoadArray[countX].substring(0, 3)][countY][countZ] = hl7Body[payLoadArray[countX].substring(0, 3)][countY][countZ].split('~');
                        }
                    }
                }
            }

        }
    }
    setTimeout(() => {
        console.log(hl7Body);
        // console.log(hl7Body.MSH);
        json2Hl7(hl7Body);
    }, 500);
}
let json2Hl7 = (jsonObj) => {
    let hl7Str = '';
    for (let x in jsonObj) {
        hl7Str = hl7Str + '\r\n' + x + '|' + getResult(jsonObj[x], 1);
    }
    setTimeout(() => {
        // console.log(hl7Str.substring(2));
    }, 500)
}

let getResult = (inputParam, level) => {
    let tmpStr = '';
    switch (level) {
        case 1:
            if (Array.isArray(inputParam)) {
                let tmpCount = 0;
                for (let tmpCell in inputParam) {
                    if (++tmpCount < inputParam.length) {
                        tmpStr = tmpStr + getResult(inputParam[tmpCell], 2) + '|';
                    } else {
                        return tmpStr + getResult(inputParam[tmpCell], 2);
                    }
                }
            } else {
                return inputParam;
            }
            break;
        case 2:
            if (Array.isArray(inputParam)) {
                let tmpCount = 0;
                for (let tmpCell in inputParam) {
                    if (++tmpCount < inputParam.length) {
                        tmpStr = tmpStr + getResult(inputParam[tmpCell], 3) + '^';
                    } else {
                        return tmpStr + getResult(inputParam[tmpCell], 3);
                    }
                }
            } else {
                return inputParam;
            }
            break;
        case 3:
            if (Array.isArray(inputParam)) {
                let tmpCount = 0;
                for (let tmpCell in inputParam) {
                    if (++tmpCount < inputParam.length) {
                        tmpStr = tmpStr + getResult(inputParam[tmpCell], 4) + '~';
                    } else {
                        return tmpStr + getResult(inputParam[tmpCell], 4);
                    }
                }
            } else {
                return inputParam;
            }
            break;
        default:
            return inputParam;
    }
}


module.exports = {
    hl72Json: hl72Json,
    json2Hl7: json2Hl7
}

調(diào)用如下:

let fs = require('fs');
let path = require('path');
let handler = require('./main_sim_4');

// -----------------------------------------------------------------------

function test(filename) {
    var filepath = path.normalize(path.join(__dirname, filename));
    fs.readFile(filepath, 'utf8', function (err, xmlStr) {
        let jsonBody = handler.hl72Json(xmlStr);
        // console.log('======================')
        //console.log(jsonBody);

        //let xml = handler.json2xml(jsonBody);
        //console.log(xml);
    });
};

test('hl7payload2.txt');
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拭抬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侵蒙,更是在濱河造成了極大的恐慌造虎,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纷闺,死亡現(xiàn)場離奇詭異算凿,居然都是意外死亡份蝴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門氓轰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婚夫,“玉大人,你說我怎么就攤上這事署鸡“覆冢” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵储玫,是天一觀的道長。 經(jīng)常有香客問我萤皂,道長撒穷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任裆熙,我火速辦了婚禮端礼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘入录。我一直安慰自己蛤奥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布僚稿。 她就那樣靜靜地躺著凡桥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚀同。 梳的紋絲不亂的頭發(fā)上缅刽,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音蠢络,去河邊找鬼衰猛。 笑死,一個胖子當(dāng)著我的面吹牛刹孔,可吹牛的內(nèi)容都是我干的啡省。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼髓霞,長吁一口氣:“原來是場噩夢啊……” “哼卦睹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起方库,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤分预,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后薪捍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笼痹,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡配喳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凳干。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晴裹。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖救赐,靈堂內(nèi)的尸體忽然破棺而出涧团,到底是詐尸還是另有隱情,我是刑警寧澤经磅,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布泌绣,位于F島的核電站,受9級特大地震影響预厌,放射性物質(zhì)發(fā)生泄漏阿迈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一轧叽、第九天 我趴在偏房一處隱蔽的房頂上張望苗沧。 院中可真熱鬧,春花似錦炭晒、人聲如沸待逞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽识樱。三九已至,卻和暖如春震束,著一層夾襖步出監(jiān)牢的瞬間牺荠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工驴一, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留休雌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓肝断,卻偏偏與公主長得像杈曲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胸懈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理担扑,服務(wù)發(fā)現(xiàn),斷路器趣钱,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 時間懂得我的急 它走著 土地懂得我的向往 它拼命給養(yǎng) 太陽懂得我心中的陰影 它亮著 甚至連月亮 連星辰 都因懂得我...
    梔冰燃閱讀 292評論 0 1
  • 每件東西都承載了一份記憶和情懷 更多的東西都是在失去之前才意識到珍貴 我選擇舍棄一樣?xùn)|西涌献,雖然它承載了不一樣的價值...
    林文竹閱讀 164評論 0 0
  • 宇宙超級無敵美少媽沉魚落雁閉月羞花膚如潤玉唇若凝脂明眸皓月婀娜多姿知書達(dá)理溫文爾雅端莊秀氣力拔山兮的我迎姐你好,我...
    默默輝煌閱讀 441評論 1 3