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);
xml转json和实体类的两种方式的更多相关文章
- Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- python_106_创建类的两种方式
class Foo(object): def __init__(self, name): self.name = name f = Foo("alex") print(type(f ...
- mybatis 热部署xml文件(spring boot和springmvc两种方式)
参考:http://thinkgem.iteye.com/blog/2304557 步骤:1.创建两个java类 (1)MapperRefresh.java :用于刷新mapper (2)SqlS ...
- webserver代理生成本地类的两种方式
方式1,把webservers地址请求出来的xml拷贝出来放到文本里面后缀改成wsdl文件在VS里面使用下列命令 C:\Program Files (x86)\Microsoft SDKs\Windo ...
- Dynamics CRM2013/2015 检索实体属性的两种方式
昨天有朋友问起如何查询一个字段属性是否存在于某个实体中,一般这个问题我们会采取最直观的查询方式即MetadataBrowser,该工具是一个zip解决方案包在SDK中的如下目录内"\SDK\ ...
- Java解析Json数据的两种方式
JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...
- C#复杂XML反序列化为实体对象两种方式
前言 今天主要讲的是如何把通过接口获取到的Xml数据转换成(反序列化)我们想要的实体对象,当然Xml反序列化和Json反序列化的方式基本上都是大同小异.都是我们事先定义好对应的对应的Xml实体模型,不 ...
- Java中将xml文件转化为json的两种方式
原文地址https://blog.csdn.net/a532672728/article/details/76312475 最近有个需求,要将xml转json之后存储在redis中,找来找去发现整体来 ...
- Visual Studio 2015 将json转换为实体类
最新写的一个接口需要接收json参数,然后序列化为实体类然后再进行后面的逻辑处理.因为json中键值对比较多,逐一去手写实体中的每个属性太麻烦,于是寻思是否有这样的工具可以将json转换为实体类. 经 ...
随机推荐
- [Unity][安卓]Unity和Android Studio 3.0 交互通讯(1)Android Studio 3.0 设置
[安卓]Android Studio 3.0 JDK安卓环境配置(2017.10) http://blog.csdn.net/bulademian/article/details/78387052 [ ...
- condition版生产者与消费者模式
1.简介 在爬虫中,生产者与消费者模式是经常用到的.我能想到的比较好的办法是使用redis或者mongodb数据库构造生产者消费者模型.如果直接起线程进行构造生产者消费者模型,线程容易假死,也难以构造 ...
- Ubuntu设置su和sudo为不需要密码 (摘录自别处)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/langb2014/article/details/54646675 针对非服务器用户,只是用普通的U ...
- http协议状态码及其意义
什么是状态码? 状态码的作用是:服务器告诉客户端,发生了什么事. 在http协议中状态码出现在http response 的第一行.它会返回一个三位数的状态码和状态信息.状态码为了便于程序进行处理,而 ...
- 蓝桥杯近3年决赛题之二(16年b组)
做的时候只做对了第一题. 1. 一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制 ...
- Redis4.0 之持久化存储
redis如果提供缓存服务,可以关闭所有持久化存储,如此一来redis重启后所有数据会丢失 开启rdb或aof持久化存储,能把redis中的数据持久化到磁盘中. rdb和aof对性能都有影响,所以建议 ...
- CentOS 7 zabbix添加监控服务器
CentOS 7 yum安装zabbix 设置中文界面 安装环境 CentOS 7 关闭防火墙和SElinux 在被监控端安装zabbix-agent [root@zabbix-agent ~]# ...
- (3)打造简单OS-MBR引导区转移加载简单程序(突破512限制)
在第一节<(1)汇编写入引导区,虚拟机启动步骤>中讲解到一个简单屏幕显示一川字符串,第二节讲到BIOS启动过程! 第一节中基本原理就是将那个汇编代码用nasm汇编器进行汇编成二进制,然后把 ...
- MODBUS协议解析中常用的转换帮助类(C#)
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- ROS kinetic语音识别
1.安装依赖 1.1安装ros-kinetic-audio-common sudo apt-get install ros-kinetic-audio-common 1.2 安装libasound2 ...