【开发心得】xml与json互转

前言:与webservice通讯时,经常会遇到json转xml和xml转object以及xml转json的场景,这里提供一个实现,也是参考别人的。

<dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
       <version>1.2.47</version>
</dependency>
<dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20180130</version>
</dependency>
package com.hmwl.utils;

import com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.json.XML;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;

/**      
 * 需要使用依赖pom坐标 此方法不需要对应实体类即可转换
 * <dependency>
 *     <groupId>org.json</groupId>
 *     <artifactId>json</artifactId>
 *     <version>20180130</version>
 *     </dependency>
 */
public class XmlUtils {
     /**
     * 方法描述
     * @since:
     * @param:  * @param null
     * @return: null
     * @date:
     */
    public static String xmlConvertJson(String xmlStr) {
        if(StringUtils.isBlank(xmlStr)) {
            return null;
        }
        JSONObject jsonObject = XML.toJSONObject(xmlStr);
        System.out.println(jsonObject.toString());
        return jsonObject.toString();
    }

    /**
     * 将XML转为指定的POJO
     *
     * @param clazz 转换类型
     * @param xmlStr 带解析字符串
     * @return 出参
     */
    public static Object xmlStrToOject(Class<?> clazz, String xmlStr) {
        try {
            xmlStr = xmlStr.replaceAll("\\t", "");
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            Reader reader = new StringReader(xmlStr);
            Object xmlObject = unmarshaller.unmarshal(reader);
            reader.close();
            return xmlObject;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

        /**
         * @param object
         * @return
         * @throws Exception
     */
    public static String objectToXmlStr(Object object) {
        try {
            StringWriter writer = new StringWriter();
            JAXBContext context = JAXBContext.newInstance(object.getClass());
            Marshaller marshal = context.createMarshaller();
            // 格式化输出
            marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            // 编码格式,默认为GBK
            marshal.setProperty(Marshaller.JAXB_ENCODING, "GBK");
            // 是否省略xml头信息
            marshal.setProperty(Marshaller.JAXB_FRAGMENT, false);
            marshal.setProperty("jaxb.encoding", "GBK");
            marshal.setProperty("com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler",
                    (CharacterEscapeHandler) (ch, start, length, isAttVal, writer1) -> writer1.write(ch, start, length));
            marshal.marshal(object, writer);
            return new String(writer.getBuffer());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_26834611/article/details/115064007
今日推荐