java中xml与bean和json的互转

本文介绍Java中XML与对象及JSON之间的转换方法,包括实体类到XML、XML到实体类、JSON到XML和XML到JSON的转换。通过示例代码展示了如何使用JAXB进行XML与Java对象的相互转换,以及利用XMLSerializer实现JSON与XML的互转。

java中xml转对象和xml转json

项目接口对接中,大部分是传输json格式的数据,但也不排除其它格式的,比如xml,下面给大家提供的是xml和json格式转化的一些方法

XmlBeanUtil类

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

public class XmlBeanUtil {
    /**
     * 实体转xml
     * @param obj
     * @param load
     * @return
     * @throws JAXBException
     */
    public static String beanToXml(Object obj,Class<?> load) throws JAXBException {

         JAXBContext context = JAXBContext.newInstance(load);
         Marshaller marshaller = context.createMarshaller();
         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
         marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
         marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
         StringWriter writer = new StringWriter();
         marshaller.marshal(obj,writer);

         return writer.toString();
      }

    /**
     * xml转实体
     * @param respXml
     * @param load
     * @return
     * @throws JAXBException
     */
    public static Object XmlToBean (String respXml,Class<?> load)  throws JAXBException{

     JAXBContext context = JAXBContext.newInstance(load);
     Unmarshaller unmarshaller = context.createUnmarshaller();
     Object object = unmarshaller.unmarshal(new StringReader(respXml));

    return object;
}

}

XmlJsonUtils类


import net.sf.json.JSON;
import net.sf.json.JSONSerializer;
import net.sf.json.xml.XMLSerializer;

import java.util.Map;
/**
 * JSON(数组)字符串转换成XML字符串
 * (必须引入 xom-1.1.jar)
 * @param
 * @return
 */
public class XmlJsonUtils {

        public static String json2xml(String jsonString) {
            XMLSerializer xmlSerializer = new XMLSerializer();
            xmlSerializer.setTypeHintsEnabled(false); // 去除 节点中type类型
            String xml = xmlSerializer.write(JSONSerializer.toJSON(jsonString));
            xml = xml.replace("<o>", "").replace("</o>", "");
            xml = xml.replaceAll("\r\n", "").concat("\r\n");
            return xml;
        }
        /**
         * xml 转 json
         * @param
         * @return
         */
        public static String xml2json(String xmlString) {
            XMLSerializer xmlSerializer = new XMLSerializer();
            JSON json = xmlSerializer.read(xmlString);
            String jsonString= json.toString();
            if(jsonString.contains("@")){
                jsonString=jsonString.replaceAll("@","");
            }
            return jsonString;
        }

MyJsonUtil 类


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class MyJsonUtil {
    private static Log log = LogFactory.getLog(MyJsonUtil.class);

    public MyJsonUtil() {
    }

    public static String object2json(Object obj) {
        StringBuilder json = new StringBuilder();
        if (obj == null) {
            json.append("\"\"");
        } else if (!(obj instanceof String) && !(obj instanceof Integer) && !(obj instanceof Float) && !(obj instanceof Boolean) && !(obj instanceof Short) && !(obj instanceof Double) && !(obj instanceof Long) && !(obj instanceof BigDecimal) && !(obj instanceof BigInteger) && !(obj instanceof Byte)) {
            if (obj instanceof Object[]) {
                json.append(array2json((Object[])obj));
            } else if (obj instanceof List) {
                json.append(list2json((List)obj));
            } else if (obj instanceof Map) {
                json.append(map2json((Map)obj));
            } else if (obj instanceof Set) {
                json.append(set2json((Set)obj));
            } else {
                json.append(bean2json(obj));
            }
        } else {
            json.append("\"").append(string2json(obj.toString())).append("\"");
        }

        return json.toString();
    }

    public static String bean2json(Object bean) {
        StringBuilder json = new StringBuilder();
        json.append("{");
        PropertyDescriptor[] props = null;

        try {
            props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();
        } catch (IntrospectionException var7) {
            ;
        }

        if (props != null) {
            for(int i = 0; i < props.length; ++i) {
                try {
                    String name = object2json(props[i].getName());
                    String value = object2json(props[i].getReadMethod().invoke(bean));
                    json.append(name);
                    json.append(":");
                    json.append(value);
                    json.append(",");
                } catch (Exception var6) {
                    ;
                }
            }

            json.setCharAt(json.length() - 1, '}');
        } else {
            json.append("}");
        }

        return json.toString();
    }

    public static String list2json(List<?> list) {
        StringBuilder json = new StringBuilder();
        json.append("[");
        if (list != null && list.size() > 0) {
            Iterator var3 = list.iterator();

            while(var3.hasNext()) {
                Object obj = var3.next();
                json.append(object2json(obj));
                json.append(",");
            }

            json.setCharAt(json.length() - 1, ']');
        } else {
            json.append("]");
        }

        return json.toString();
    }

    public static String array2json(Object[] array) {
        StringBuilder json = new StringBuilder();
        json.append("[");
        if (array != null && array.length > 0) {
            Object[] var5 = array;
            int var4 = array.length;

            for(int var3 = 0; var3 < var4; ++var3) {
                Object obj = var5[var3];
                json.append(object2json(obj));
                json.append(",");
            }

            json.setCharAt(json.length() - 1, ']');
        } else {
            json.append("]");
        }

        return json.toString();
    }

    public static String map2json(Map<?, ?> map) {
        StringBuilder json = new StringBuilder();
        json.append("{");
        if (map != null && map.size() > 0) {
            Iterator var3 = map.keySet().iterator();

            while(var3.hasNext()) {
                Object key = var3.next();
                json.append(object2json(key));
                json.append(":");
                json.append(object2json(map.get(key)));
                json.append(",");
            }

            json.setCharAt(json.length() - 1, '}');
        } else {
            json.append("}");
        }

        return json.toString();
    }

    public static String set2json(Set<?> set) {
        StringBuilder json = new StringBuilder();
        json.append("[");
        if (set != null && set.size() > 0) {
            Iterator var3 = set.iterator();

            while(var3.hasNext()) {
                Object obj = var3.next();
                json.append(object2json(obj));
                json.append(",");
            }

            json.setCharAt(json.length() - 1, ']');
        } else {
            json.append("]");
        }

        return json.toString();
    }

    public static String string2json(String s) {
        if (s == null) {
            return "";
        } else {
            StringBuilder sb = new StringBuilder();

            for(int i = 0; i < s.length(); ++i) {
                char ch = s.charAt(i);
                switch(ch) {
                    case '\b':
                        sb.append("\\b");
                        continue;
                    case '\t':
                        sb.append("\\t");
                        continue;
                    case '\n':
                        sb.append("\\n");
                        continue;
                    case '\f':
                        sb.append("\\f");
                        continue;
                    case '\r':
                        sb.append("\\r");
                        continue;
                    case '"':
                        sb.append("\\\"");
                        continue;
                    case '/':
                        sb.append("\\/");
                        continue;
                    case '\\':
                        sb.append("\\\\");
                        continue;
                }

                if (ch >= 0 && ch <= 31) {
                    String ss = Integer.toHexString(ch);
                    sb.append("\\u");

                    for(int k = 0; k < 4 - ss.length(); ++k) {
                        sb.append('0');
                    }

                    sb.append(ss.toUpperCase());
                } else {
                    sb.append(ch);
                }
            }

            return sb.toString();
        }
    }
}

注解的方式对象转xml

@XmlRootElement(name ="Request")
public class SFRequest implements Serializable{

    private String service;
    private String lang;
    private String head;
    private SFRequestBody body;
    public  SFRequest(String service,String lang,String head,SFRequestBody body){
      this.service=service;
      this.lang=lang;
      this.head=head;
      this.body=body;
    }
    public SFRequest(){
        super();
    }

    @XmlAttribute(name="service")
    public String getService() {
        return service;
    }

    public void setService(String service) {
        this.service = service;
    }
    @XmlAttribute(name="lang")
    public String getLang() {
        return lang;
    }

    public void setLang(String lang) {
        if(StringUtils.isBlank(lang)){
            this.lang="zh-CN";
        }else{
            this.lang = lang;
        }

    }
    @XmlElement(name="Head")
    public String getHead() {
        return head;
    }

    public void setHead(String head) {
        this.head = head;
    }
    @XmlElement(name="Body")
    public SFRequestBody getBody() {
        return body;
    }

    public void setBody(SFRequestBody body) {
        this.body = body;
    }
  • 仔细看
import javax.xml.bind.annotation.XmlElement;

//请求Body
public class SFRequestBody {
    private SFOrder sfOrder;
    @XmlElement(name="Order")
    public SFOrder getSfOrder() {
        return sfOrder;
    }
    public void setSfOrder(SFOrder sfOrder) {
        this.sfOrder = sfOrder;
    }
    public SFRequestBody(){
        super();
    }
//实体
    public SFRequestBody(SFOrder order){
        this.sfOrder=order;
    }

解释

  • @XmlRootElement(name =“Request”)
    解析为xml顶部节点
  • @XmlAttribute(name=“service”)
    解析为xml节点属性
  • @XmlElement(name=“Head”)
    解析为xml根部节点
    测试结果(该结果不是以上代码测的,看了结果大家就会明白注解的功能)
                   <Request service="RoutePushService"  lang="zh-CN">
                   <Body>
                        <WaybillRoute id="10049361064087" remark="上门收件"  opCode="50"/>
                   </Body> 
                   </Request>

以上就是转换过程,欢迎大家评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值