xml轉json和實體類的兩種方式


本文為博主原創,未經允許不得轉載:

  xml在http通信中具有較高的安全性和傳輸速度,所以應用比較廣泛,

  在項目中往往需要對xml,json和實體類進行相互轉換,在這里總結一下自己所用到的一些方法:

一. 使用XMLSerializer 將xml轉為json格式

  1.引入jar包:

<dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <classifier>jdk15</classifier>
        </dependency>

  使用示例:

public static void main(String[] args) {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                +"<domain xmlns:cloudcdn=\"http://cloud.chinanetcenter.com/extension/xhtml\">"
                + "<domain-id>fdg68</domain-id>"
                + "<domain-name>dfsg.com</domain-name>"
                + "<service-type>web-https</service-type>"
                + "<service-areas/>"
                + "<cname>fdsgsdg.com</cname>"
                + "<status>Deployed</status>"
                + "<comment/>"
                + "</domain>"
                ;
          XMLSerializer cacheXmlSerializer = new XMLSerializer();
        JSON referJsonResult = cacheXmlSerializer.read(xml);
        JSONObject referJson = JSONObject.parseObject(referJsonResult.toString());
        System.out.println(referJson);
     //運行打印的結果為:
//{"domain-name":"dfsg.com","domain-id":"fdg68","service-type":"web-https","cname":"fdsgsdg.com","@xmlns:cloudcdn":"http://cloud.chinanetcenter.com/extension/xhtml","comment":[],"service-areas":[],"status":"Deployed"} }

二.通過XStream將xml轉化為實體類,

  通過第一種方式也可以將xml解析為實體類,步驟為,先將xml轉為json,然后將json轉為實體類,

  這里介紹的方式是通過XStream將xml轉為實體類:

    XStream是個很強大的工具,能將java對象和xml之間相互轉化。xstream不在意java類中成員變量是私有還是公有,

  也不在乎是否有默認構造函數。它調用方式也非常簡單:從xml對象轉化為java對象,使用fromXML()方法;

  從java對象序列化為xml,toXML()即可,很方便。

  xstream也支持注解方式,注解方式實現和非注解方式實現的區別在於是否單獨解析別名,

    如果是注解的方式,可以直接使用注解的屬性將xml字段與實體類字段進行映射。

  具體可參考:https://blog.csdn.net/dc282614966/article/details/80970750

  此處展示注解式轉換的實例:

  @XStreamAlias("message") 別名注解 ,作用就是將屬性按照別名輸出。

@XStreamAlias("User")
public class User {

    @XStreamAlias("name")
    private String name;
    @XStreamAlias("age")
    private String age;
    @XStreamAlias("SEX")
    private String sex;
    public User(String name, String age, String sex) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    }
}

1.xml轉換實體類的實現方式:

public static void main(String[] args) {
        String xml="<User>\n"
                +" <name>peter</name> \n"
                +"  <age>13</age> \n"
                +"  <SEX>男</SEX> \n"
                +" </User>";
         XStreamEx xStream = new XStreamEx();
         xStream.processAnnotations(User.class);
         User user = (User) xStream.fromXML(xml);
    }

2.將實體類轉xml的方式

     User user = new User();
        user.setName("test");
        // 轉換
        XStream xStream = new XStream();
        // 通過注解方式的,一定要有這句話
        xStream.processAnnotations(user.getClass());
        String xmlCfg = xStream.toXML(user);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM