Преобразование HL7 v2 в JSON

Я хочу преобразовать сообщения HL7 v2 (старый формат EDI) в JSON, чтобы я мог сделать их обрабатываемыми в Apache Drill и сжимаемыми в Parquet.

Я просмотрел HAPI, но мне не удалось найти утилиту для не-XML Преобразование HL7 в JSON.

У кого-нибудь есть предложение или ссылка на библиотеку?


person Edmon    schedule 24.08.2015    source источник
comment
ты проверял интернет? например, mirthcorp.com/community/forums/showthread.php?t=7743   -  person sqlab    schedule 03.09.2015
comment
Да, конечно. Mirth немного великоват и MPL 1.1.   -  person Edmon    schedule 03.09.2015


Ответы (1)


Просто используйте HAPI для преобразования в XML. Для приведенного ниже кода требуется Saxon, потому что для преобразования XML в JSON требуется XSLT 2.0, но если у вас уже есть метод преобразования XML в JSON, вам нужны только первые две строки, которые полностью HAPI. Конечно, вы должны загрузить XSLT локально для производства. :-)

String convertHL7ToJson(Message message) {
    try {
        DefaultXMLParser xmlParser = new DefaultXMLParser(new CanonicalModelClassFactory("2.6"));
        String xml = xmlParser.encode(message);
        Transformer xmlTransformer = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null).newTransformer(
            new StreamSource(new StringReader(readFileFromURL("https://github.com/bramstein/xsltjson/raw/master/conf/xml-to-json.xsl")))
            );
          StringWriter result = new StringWriter();
          xmlTransformer.transform(
             new StreamSource(new StringReader(xml)), new StreamResult(result)
          );
          return result.toString();
    } catch (Throwable t) {
        t.printStackTrace();
    }
    return null;
}

String readFileFromURL(String url) {
    InputStream is = null;
    try {
        return new Scanner(is = new URL(url).openStream(), "UTF-8").useDelimiter("\\A").next();
    } catch (Throwable t) {
        t.printStackTrace();
    } finally {
        if(is != null)
            try {
                is.close();
            } catch (Throwable ignored){}
    }
    return null;
}

Это создает вывод следующим образом:

"ORM_O01":{"MSH":{"MSH.1":"|","MSH.2":"^~\\&","MSH.3":{"HD.1":"TEST"},"MSH.4":{"HD.1":"TEST000","HD.2":"BL"},...
person Buddha Buddy    schedule 06.02.2016