JAVA 实体类Entity 对象Object HashMap Xml 互相转换

432 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

@[TOC](JAVA 实体类Entity 对象Object HashMap 互转)

Object转HashMap

JSONObject.parseObject(JSONObject.toJSONString(object), new TypeReference<HashMap<String, Object>>(){});

Object 转 List

JSONObject.parseArray(JSONObject.toJSONString(object), Entity.class)

HashMap 转 Entity

JSON.parseObject(JSON.toJSONString(hashmap), Entity.class);

Xml字符串 递归转 Map

XML转换的时候, 格式特殊字符有诸多报错.

public class CovertUtils
{

	public static Map<String, Object> xml2Map(String strXML, Map<String, Object> data) throws Exception {
        if(data==null) {
            data = new HashMap();
        }
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        InputStream stream = new ByteArrayInputStream(strXML.getBytes(StandardCharsets.UTF_8));
        org.w3c.dom.Document doc = documentBuilder.parse(stream);
        doc.getDocumentElement().normalize();
        NodeList nodeList = doc.getDocumentElement().getChildNodes();

        for(int idx = 0; idx < nodeList.getLength(); ++idx) {
            org.w3c.dom.Node node = nodeList.item(idx);
            if (node.getNodeType() == 1) {
                org.w3c.dom.Element element = (org.w3c.dom.Element)node;
                // 节点类型 !=1, 认为下面没有层级了
                if(element.getFirstChild().getNodeType()==1) {
                    Document document = element.getOwnerDocument();
                    DOMImplementationLS domImplLS = (DOMImplementationLS) document.getImplementation();
                    LSSerializer serializer = domImplLS.createLSSerializer();
                    // 这里不移除,会报错
                    String nodeXml = serializer.writeToString(element).replace("\n","").replace("<?xml version="1.0" encoding="UTF-16"?>","");
                    Map<String, Object> nodeData = new HashMap();
                    xml2Map(nodeXml, nodeData);
                    data.put(element.getNodeName(), nodeData);
                } else {
                    data.put(element.getNodeName(), element.getTextContent());
                }
            }
        }

        try {
            stream.close();
        } catch (Exception var10) {
        }

        return data;
    }
	   
	public static void main(String[] args) throws Exception {
        String xml = "<?xml version="1.0" encoding="UTF-8"?><Packet><Head><CRequestType>163000</CRequestType><CBusiChnl>csdn</CBusiChnl><ResultCode>10000</ResultCode><ResultMessage>成功</ResultMessage></Head><Body><Base><AppNo>appNo123456</AppNo><PayUrl>test</PayUrl></Base></Body></Packet>";
        System.out.println(xml2Map(xml, null));
    }
    
}