创建DICOM属性时,SAXParser for JSON

时间:2017-03-01 22:54:15

标签: java json xml parsing saxparser

我目前正在处理一个项目,我收到Dicom XML数据,使用SAXParser解析数据,将解析后的数据存储为Attributes对象(https://github.com/dcm4che/dcm4che/blob/master/dcm4che-core/src/main/java/org/dcm4che3/data/Attributes.java),并将Attributes对象添加到attributesList。

我用于XML的解析器是SAXParser,我还使用SAXParserFactory来创建XML解析器实例。

更改接受标头后,我现在以JSON而不是XML接收相同的DICOM数据。是否有一个JSON解析器和解析器工厂,我可以用于相同的目的?如果是这样,我应该如何修改我当前的代码?

我目前的解析代码:

    public void bodyPart(int i, MultipartInputStream partInputStream) throws IOException {
        try {
            partInputStream.readHeaderParams();
            SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
            Attributes dicomAttributes = new Attributes();
            parser.parse(new AttributesList.NonClosingInputSteam(partInputStream), new ContentHandlerAdapter(dicomAttributes));
            attributesList.add(dicomAttributes);
        }
        catch (ParserConfigurationException | SAXException e) {
            // This should never happen unless the server returns invalid content. Log and return.
            log.error("Error parsing!", e);
            e.printStackTrace();
        }
    }

     private static class NonClosingInputSteam extends FilterInputStream {

    /**
     * Creates a new NonClosingInputStream that wraps another input stream.
     *
     * @param in the input stream to be wrapped
     */
    NonClosingInputSteam(InputStream in) {
        super(in);
    }


    /**
     * Overrides the default implementation of the input stream's close() method. This implementation
     * does nothing.
     */
    @Override
    public void close() {
        // Do nothing
    }
}

谢谢!

1 个答案:

答案 0 :(得分:0)

默认情况下没有,所以你必须自己编写。

但请看一下规范merging the entity data

根据DICOM的Json格式,您可以看到数据的写入方式。

进一步说,您可以根据此进行解析,以确保您的解析符合规范。