java json xml app交互_Java 实体 xml 和 json 之间相互转换
一、相关注解与方法
1.注解(部分)
@JsonProperty:把属性的名称序列化成另一个名称
@JsonFormat:日期格式转换(例如:@JsonFormat(timezone=“GTM+8”,pattern=“yyyy-MM-dd HH:mm:ss”))
@JsonIgnoreProperties:忽略类的某个属性(作用于类,例如:@JsonIgnoreProperties({“属性1”,“属性2”}))
@JsonIgnore:忽略类的某个属性(作用于属性,直接在属性加注解即可)
@JacksonXmlElementWrapper:可用于指定List等集合类,外围标签名
@JacksonXmlProperty:指定包装标签名,或者指定标签内部属性名
@JacksonXmlRootElement:指定生成xml根标签的名字
@JacksonXmlText:指定当前值,没有xml标签包裹
【tips】
在类中的部分属性使用@JsonProperty和@JacksonXmlProperty注解时,生成的XML字符串标签顺序可能会发生改变
2.方法(主要)
XmlMapper类的方法
实体类(任意类型)解析为xml的字符串
String writeValueAsString(Object var1);
把字符串转换为实体类
T readValue(String var1, Class var2);
读取xml字符串为json格式
JsonNode readTree(String var1);
JsonNode类的方法
获取json中的某个节点值
JsonNode get(String var1);
二、使用步骤
1.新建实体类
//java项目www.fhadmin.org
@Data
public class Student {
private String studentNo;
private String studentName;
}
2.新建测试类
【tips】
代码中打印语句后的注释为控制台打印的结果
//java项目www.fhadmin.org
public class Demo {
//创建XmlMapper对象,用于实体与json和xml之间的相互转换
private static final XmlMapper XML_MAPPER = new XmlMapper();
public static void main(String[] args) throws Exception {
Student s = new Student();
s.setStudentNo("202101001");
s.setStudentName("张三");
//实体类解析为xml的字符串(理论上可以将任意类型解析为xml字符串)
String xmlStr = XML_MAPPER.writeValueAsString(s);
System.out.println(xmlStr);//202101001张三
//把字符串转换为实体类
Student student = XML_MAPPER.readValue(xmlStr, Student.class);
System.out.println(student);//Student(studentNo=202101001, studentName=张三)
//读取xml字符串为json格式
JsonNode jsonNode = XML_MAPPER.readTree(xmlStr);
System.out.println(jsonNode);//{"studentNo":"202101001","studentName":"张三"}
//获取json中的某一个节点值
JsonNode studentNo = jsonNode.get("studentNo");
System.out.println(studentNo);//"202101001"
}
}
运行结果
三、综合案例
1.实体类部分
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data;
import java.util.List;
/**
* @java项目 www.fhadmin.org
* @version V1.0
* @Title:
* @Description:
* @date 2021/1/10 21:40
*/
@Data
@JsonIgnoreProperties({"ignore"})//忽略类的某个属性
public class Clazz {
//把属性的名称序列化成另一个名称
@JsonProperty("CLAZZNO")
private String clazzNo;
//指定包装标签名,或者指定标签内部属性名
@JacksonXmlProperty(localName = "CLAZZNAME")
private String clazzName;
//忽略类的某个属性
@JsonIgnore
private String ignore;
private Teacher teacher;
//指定外围标签名
@JacksonXmlElementWrapper(localName = "studentList")
//指定标签名
@JacksonXmlProperty(localName = "student")
private List studentList;
}
@Data
class Teacher {
private String teacherName;
private String teacherSex;
}
@Data
class Student {
private String studentNo;
private String studentName;
}
2.测试类部分
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.util.ArrayList;
import java.util.List;
/**
* @java项目www.fhadmin.org
* @version V1.0
* @Title:
* @Description:
* @date 2021/1/10 21:43
*/
public class Demo {
//创建XmlMapper对象,用于实体与json和xml之间的相互转换
private static final XmlMapper XML_MAPPER = new XmlMapper();
public static void main(String[] args) throws Exception{
Clazz c = new Clazz();
c.setClazzNo("201802");
c.setClazzName("三年级2班");
c.setIgnore("这是被忽略的属性");
Teacher t = new Teacher();
t.setTeacherName("宋老师");
t.setTeacherSex("男");
c.setTeacher(t);
List students = new ArrayList<>();
Student s1 = new Student();
s1.setStudentNo("202101001");
s1.setStudentName("张三");
Student s2 = new Student();
s2.setStudentNo("202101002");
s2.setStudentName("李四");
students.add(s1);
students.add(s2);
c.setStudentList(students);
//实体类解析为xml的字符串
String xmlStr = XML_MAPPER.writeValueAsString(c);
System.out.println(xmlStr);
//把某一类型的东西转换为实体类
Clazz clazz = XML_MAPPER.readValue(xmlStr, Clazz.class);
System.out.println(clazz);
//取出Clazz类的studentList属性并打印
List studentList = clazz.getStudentList();
System.out.println(studentList);
//读取xml字符串为json格式
JsonNode jsonNode = XML_MAPPER.readTree(xmlStr);
System.out.print(jsonNode);
}
}
运行结果
宋老师男201802三年级2班202101001张三202101002李四
Clazz(clazzNo=201802, clazzName=三年级2班, ignore=null, teacher=Teacher(teacherName=宋老师, teacherSex=男), studentList=[Student(studentNo=202101001, studentName=张三), Student(studentNo=202101002, studentName=李四)])
[Student(studentNo=202101001, studentName=张三), Student(studentNo=202101002, studentName=李四)]
{"teacher":{"teacherName":"宋老师","teacherSex":"男"},"CLAZZNO":"201802","CLAZZNAME":"三年级2班","studentList":{"student":{"studentNo":"202101002","studentName":"李四"}}}
java json xml app交互_Java 实体 xml 和 json 之间相互转换相关推荐
- java xml特殊字符转义_Java中将xml文件转化为json遇到特殊字符会报错!
前言: 我们在项目开发中,有时候调用别人提供的接口,接收到的数据是xml,这时候为了方便后续开发中的使用,需要解析xml并把数据转化成json,今天这篇文章就讲解下如何把xml转化成json,并在这个 ...
- java怎么xml文件解析_Java对Xml文件解析
JAVA 解析 XML 通常有两种方式,DOM 和 SAX. DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一 ...
- java解析xml文档_Java解析xml文件
读xml文件: xml文件内容: Java Eclipse Swift Xcode C# Visual Studio 代码: package XMLParse; import java.io.File ...
- java解析xml生成表格_JAVA读取XML文件并解析 以及 JAVA生成文本文件输出
废话不多说,直接上代码及说明吧! package Dao; import java.io.File; import java.util.ArrayList; import java.util.List ...
- java xml读取方法_Java读取XML文件的方法
Java读取XML文件的方法 发布时间:2020-08-19 14:39:08 来源:亿速云 阅读:63 作者:小新 这篇文章主要介绍了Java读取XML文件的方法,具有一定借鉴价值,需要的朋友可以参 ...
- java dom获取命名空间属性_Java DOM XML解析::获取元素属性值
如何从元素中提取属性值.我的xml节点是这样写的 < nodename attribute ="value">我需要将其解压缩以将其与另一个字符串进行比较. 但由 ...
- java和以太坊交互_java类库web3j开发以太坊智能合约快速入门
web3j简介 web3j是一个轻量级.高度模块化.响应式.类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成. 可以通过它进行以太坊 ...
- java对象和字符串转换_java中字符串和JSON对象、Bean之间的相互转换
JSON格式用于数据传输.bean用于封装数据信息.String用于展示封装信息.json格式的内容用json工具或者之间在json.cn展示比较清晰. 一.将Sting转为Json 在开发中,经常是 ...
- JAVA写XML乱码问题_java 写 xml 中文乱码
今天用java写xml文件,发现写完后xml文件的中文就变成了乱码, 解决办法:把xml文件的头部编码改为utf-8,StreamResult编码方式也改为utf-8. =============部分 ...
最新文章
- Unity3D对apk反编译、重编译、重签名
- TensorFlow: couldn’t open CUDA library cupti64_80.dll、InternalError: Blas SGEMM launch failed
- Metro UI 菜单(Winform)
- 手把手教你-如何查询中文期刊是否属于核心期刊!
- 2019年终总结-如果这是一场电影
- IntelliJ IDEA 的这个接口调试工具真是太好用了!
- 数据挖掘与数据分析的区别是什么
- @spoj - lcs2@ Longest Common Substring II
- ae效果英文版翻译对照表_用AE设计动态海报教程
- 一次荒唐的技术决策过程:排除研发总监,无技术参与
- Astah Professional UML 建模工具2022版
- element-UI设置背景色和边框色
- UI设计:使用AI绘制微质感图标
- 2020.12.10丨cufflinks 简介及使用说明
- Mac获取系统版本、机型
- ​两年前不知如何编写代码的我,现在是一名人工智能工程师
- (附源码)小程序记账微信小程序 毕业设计180815
- 基于Java毕业设计疫情下的进出口食品安全信息管理系统源码+系统+mysql+lw文档+部署软件
- (转载)rsync的基本命令与使用方法
- 【Bio】基础生物学 - 含碳、氧、氮、磷、硫官能团 functional group