xml转json

百里修真
2023-12-01
public static void main(String[] args) {

        String test="<BGD><JBX><JBX.1>0000930568</JBX.1><JBX.36/></JBX><MZX><MZX.1>1804000031</MZX.1><MZX.13>陈胖胖</MZX.13><MZX.14>女</MZX.14><MZX.15>26岁</MZX.15><MZX.6>骨伤康复理疗科</MZX.6><MZX.1>1804000031</MZX.1></MZX><SQD><SQD.2>2018-04-18 14:40:55</SQD.2><SQT><SQ1><SQ1.9/></SQ1></SQT></SQD><BGD.1>0000113787</BGD.1><BGD.4>2018-04-18 14:40:55</BGD.4><BGD.49>0000432050</BGD.49><BGD.58>2018-04-18 15:41:10</BGD.58><BGD.59>9999</BGD.59><BGD.60>管理员</BGD.60><BGD.61>2018-04-18 15:35:17</BGD.61><BGD.64>1</BGD.64><ZYX><ZYX.7>陈胖胖</ZYX.7><ZYX.6>0000930568</ZYX.6><ZYX.8>女</ZYX.8><ZYX.9/><ZYX.17/><ZYX.22/><ZYX.1/></ZYX><BGD.14/><BGD.19/><r/><BGD.6>2018-04-18 15:35:17</BGD.6><BGD.5/><BGD.63/><BGD.76/><BGD.67>【肝】\n肝脏大小、形态正常,包膜光整,肝内血管走形较清晰,光点分布尚均匀,其内未见明显异常光团。\n【胆】\n胆囊大小、形态正常,囊壁光滑,囊腔内透声好,胆总管无扩张。\n【胰】\n胰腺大小、形态正常,边缘规整,内部回声均匀,胰管未见扩张。\n【脾】\n脾脏大小、形态正常,薄膜光滑,内光点均匀。\n【左肾】\n左肾大小、形态正常,包膜光滑,肾实质回声均匀,集合系统未见明显分离。\n【右肾】\n右肾大小、形态正常,包膜光滑,肾实质回声均匀,集合系统未见明显分离。</BGD.67><BGD.8>肝、胆、胰、脾、右肾、左肾未发现明显异常</BGD.8></BGD>";
        try {
            JSONObject jsonObject = new JSONObject();
            Document document = DocumentHelper.parseText(test);
            //获取根节点元素对象
            Element root = document.getRootElement();
            iterateNodes(root, jsonObject);
            System.out.println(jsonObject);
        } catch (DocumentException e) {
            e.printStackTrace();
        }

    }
    @SuppressWarnings("unchecked")
    public static void iterateNodes(Element node,JSONObject json){
        //获取当前元素的名称
        String nodeName = node.getName();
        //判断已遍历的JSON中是否已经有了该元素的名称
        if(json.containsKey(nodeName)){
            //该元素在同级下有多个
            Object Object = json.get(nodeName);
            JSONArray array = null;
            if(Object instanceof JSONArray){
                array = (JSONArray) Object;
            }else {
                array = new JSONArray();
                array.add(Object);
            }
            //获取该元素下所有子元素
            List<Element> listElement = node.elements();
            if(listElement.isEmpty()){
                //该元素无子元素,获取元素的值
                String nodeValue = node.getTextTrim();
                array.add(nodeValue);
                json.put(nodeName, array);
                return ;
            }
            //有子元素
            JSONObject newJson = new JSONObject();
            //遍历所有子元素
            for(Element e:listElement){
                //递归
                iterateNodes(e,newJson);
            }
            array.add(newJson);
            json.put(nodeName, array);
            return ;
        }
        //该元素同级下第一次遍历
        //获取该元素下所有子元素
        List<Element> listElement = node.elements();
        if(listElement.isEmpty()){
            //该元素无子元素,获取元素的值
            String nodeValue = node.getTextTrim();
            json.put(nodeName, nodeValue);
            return ;
        }
        //有子节点,新建一个JSONObject来存储该节点下子节点的值
        JSONObject object = new JSONObject();
        //遍历所有一级子节点
        for(Element e:listElement){
            //递归
            iterateNodes(e,object);
        }
        json.put(nodeName, object);
        return ;
    }
 类似资料: