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 ;
}