zoukankan      html  css  js  c++  java
  • 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>
    "
                    +" <name>peter</name> 
    "
                    +"  <age>13</age> 
    "
                    +"  <SEX>男</SEX> 
    "
                    +" </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);
  • 相关阅读:
    LeetCode 326. Power of Three
    LeetCode 324. Wiggle Sort II
    LeetCode 322. Coin Change
    LeetCode 321. Create Maximum Number
    LeetCode 319. Bulb Switcher
    LeetCode 318. Maximum Product of Word Lengths
    LeetCode 310. Minimum Height Trees (DFS)
    个人站点大开发!--起始篇
    LeetCode 313. Super Ugly Number
    LeetCode 309. Best Time to Buy and Sell Stock with Cooldown (DP)
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/10665414.html
Copyright © 2011-2022 走看看