一、相关注解与方法

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 之间相互转换相关推荐

  1. java xml特殊字符转义_Java中将xml文件转化为json遇到特殊字符会报错!

    前言: 我们在项目开发中,有时候调用别人提供的接口,接收到的数据是xml,这时候为了方便后续开发中的使用,需要解析xml并把数据转化成json,今天这篇文章就讲解下如何把xml转化成json,并在这个 ...

  2. java怎么xml文件解析_Java对Xml文件解析

    JAVA 解析 XML 通常有两种方式,DOM 和 SAX. DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一 ...

  3. java解析xml文档_Java解析xml文件

    读xml文件: xml文件内容: Java Eclipse Swift Xcode C# Visual Studio 代码: package XMLParse; import java.io.File ...

  4. java解析xml生成表格_JAVA读取XML文件并解析 以及 JAVA生成文本文件输出

    废话不多说,直接上代码及说明吧! package Dao; import java.io.File; import java.util.ArrayList; import java.util.List ...

  5. java xml读取方法_Java读取XML文件的方法

    Java读取XML文件的方法 发布时间:2020-08-19 14:39:08 来源:亿速云 阅读:63 作者:小新 这篇文章主要介绍了Java读取XML文件的方法,具有一定借鉴价值,需要的朋友可以参 ...

  6. java dom获取命名空间属性_Java DOM XML解析::获取元素属性值

    如何从元素中提取属性值.我的xml节点是这样写的 &LT nodename attribute ="value">我需要将其解压缩以将其与另一个字符串进行比较. 但由 ...

  7. java和以太坊交互_java类库web3j开发以太坊智能合约快速入门

    web3j简介 web3j是一个轻量级.高度模块化.响应式.类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成. 可以通过它进行以太坊 ...

  8. java对象和字符串转换_java中字符串和JSON对象、Bean之间的相互转换

    JSON格式用于数据传输.bean用于封装数据信息.String用于展示封装信息.json格式的内容用json工具或者之间在json.cn展示比较清晰. 一.将Sting转为Json 在开发中,经常是 ...

  9. JAVA写XML乱码问题_java 写 xml 中文乱码

    今天用java写xml文件,发现写完后xml文件的中文就变成了乱码, 解决办法:把xml文件的头部编码改为utf-8,StreamResult编码方式也改为utf-8. =============部分 ...

最新文章

  1. Unity3D对apk反编译、重编译、重签名
  2. TensorFlow: couldn’t open CUDA library cupti64_80.dll、InternalError: Blas SGEMM launch failed
  3. Metro UI 菜单(Winform)
  4. 手把手教你-如何查询中文期刊是否属于核心期刊!
  5. 2019年终总结-如果这是一场电影
  6. IntelliJ IDEA 的这个接口调试工具真是太好用了!
  7. 数据挖掘与数据分析的区别是什么
  8. @spoj - lcs2@ Longest Common Substring II
  9. ae效果英文版翻译对照表_用AE设计动态海报教程
  10. 一次荒唐的技术决策过程:排除研发总监,无技术参与
  11. Astah Professional UML 建模工具2022版
  12. element-UI设置背景色和边框色
  13. UI设计:使用AI绘制微质感图标
  14. 2020.12.10丨cufflinks 简介及使用说明
  15. Mac获取系统版本、机型
  16. ​两年前不知如何编写代码的我,现在是一名人工智能工程师
  17. (附源码)小程序记账微信小程序 毕业设计180815
  18. 基于Java毕业设计疫情下的进出口食品安全信息管理系统源码+系统+mysql+lw文档+部署软件
  19. (转载)rsync的基本命令与使用方法
  20. 【Bio】基础生物学 - 含碳、氧、氮、磷、硫官能团 functional group

热门文章

  1. 烂泥:mysql5.5数据库cmake源码编译安装
  2. 常量和指针(Pointers and Constants)
  3. Bitcoin推特遭到清洗!发生了什么?
  4. centos7下docker1.12.5学习笔记
  5. 文字在div中垂直居中
  6. 3.Linux 文件的压缩与打包
  7. Objective-C @property和@synthesize
  8. jquery用添加按钮把数据传送给PHP页面
  9. 系统提供的按钮和图标
  10. 巧妙启用Windows 2003的远程桌面