网上教程一大堆,简单直接能用的,不多,各种都是解析出来千奇百怪,后来研究了一下,主要问题其实就出在于xml文件,一个节点是对象还是列表,这个不太好区分,如果本身是列表,但是这个列表只有一条数据,这种情况就是容易误判了。
json 转 xml 的这里就忽略了,没难度,网上随便一搜一大堆。
1 2 3 4 5 6 7 8 9 10 11 12 |
<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
public class XmlToJsonUtils { public static String xmlToJson(String xmlPath) { try { // 创建一个SAXReader解析器 SAXReader reader = new SAXReader(); // 读取xml文件,转换成Document结点 Document doc = reader.read(new File(xmlPath)); // 递归打印xml文档信息 JSONObject jsonObject = xmlToJsonRoot(doc); return jsonObject.toJSONString(); } catch (DocumentException e) { e.printStackTrace(); } return null; } /** * xml转json对象 * * @param document * @return */ public static JSONObject xmlToJsonRoot(Document document) { // 取根节点 Element root = document.getRootElement(); List<Element> elements = root.elements(); JSONObject jsonObject = new JSONObject(); jsonObject.put(root.getName(), elementToJson(elements)); return jsonObject; } /** * 递归读取节点,并简单判定节点状态(值、对象、列表三种状态) * * @param elements * @return */ public static Object elementToJson(List<Element> elements) { Object object = null; if (elements.isEmpty()) { return object; } if (elements.size() == 1) { //只有一条,算对象 JSONObject jsonObject = new JSONObject(); Element element = elements.get(0); List<Element> children = element.elements(); if (!children.isEmpty()) { jsonObject.put(element.getName(), elementToJson(children)); } else { jsonObject.put(element.getName(), element.getText()); } object = jsonObject; return object; } if (!elements.get(0).getName().equals(elements.get(1).getName())) { //同一层级的名称不一样,不是列表 JSONObject jsonObject = new JSONObject(); for (Element element : elements) { List<Element> children = element.elements(); if (!children.isEmpty()) { jsonObject.put(element.getName(), elementToJson(children)); } else { jsonObject.put(element.getName(), element.getText()); } } object = jsonObject; return object; } //同一层级的名称一样,是列表 List<JSONObject> jsonList = new ArrayList<>(); for (Element element : elements) { JSONObject jsonObject = new JSONObject(); List<Element> children = element.elements(); if (!children.isEmpty()) { jsonObject = (JSONObject) elementToJson(children); } else { jsonObject.put(element.getName(), element.getText()); } jsonList.add(jsonObject); } object = jsonList; return object; } } |
1 |
IndexSecurities securities = JSON.parseObject(XmlToJsonUtils.xmlToJson(filePath), IndexSecurities.class); |
from:https://blog.csdn.net/qq_33601179/article/details/124188477