Java JSON/XML解析

一、JSON

  1. 作用:JSON是轻量级的文本数据交换格式,比XML更小、更快、更易解析;

  2. 语法规则:

    A. 数据在名称/值对中,冒号隔开;

    B. 数据由逗号分隔;

    C. 大括号保存对象;

    D. 中括号保存数组。

    注意:引号(单引号或双引号)里使用相同的引号,需要用反斜杠(\)转义 

  3. JSON工具包

    A. 四大JSON类库:Google公司的Gson、阿里巴巴的FastJson、Jackson、Json-lib;

    B. 字符串解析成javaBean或JSON——当数据量较少时选择FastJson,数据量较大时选择Jackson、JavaBean变成JSON——当数据量较少时选择Gson,数据量较大时选择Jackson、集合变成JSON——首选Jackson,其次Fastjson。

  4. Jackson

    A. Jackson为处理JSON格式提供了三种模型的处理方法,流式API、树模型、数据绑定。

    B. 常用注解

       @JsonIgnore:用在字段或方法上,表示忽略该字段或方法对应的属性;

    /**
     * 插件版本
     */
    @JsonIgnore -->忽略响应结果的某个属性
    private String versionNumber;

      @JsonIgnoreProperties:用在类上,表示某些属性在序列化、反序列化时需要忽略掉,类似于@JsonIgnore的批量操作,还有一个重要作用是在反序列化解析字段时过滤一些未知的属性,以防止报错;

复制代码
public abstract class AbstractPageEntity extends AbstractEntity{
protected int pageIndex = 1;
protected int pageSize = 15;
}
@JsonIgnoreProperties({"pageIndex", "pageSize"}) -->忽略响应结果的属性集合
public class Upgrade extends AbstractPageEntity {
    ...
}

@JsonIgnoreProperties(ignoreUnknown = true) -->过滤掉请求参数的未知属性
public class Device {
  ...
}
复制代码

      @JsonProperty:用在字段或方法上,可用来对属性序列化、反序列化,可实现属性重命名,也可避免遗漏属性;

@JsonProperty("MAC")
private String mac;

      @JsonFormat:用在字段或方法上,把Date类型直接转化为想要的格式;

  /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

  5. Fastjson

    A. 序列化一个对象成JSON字符串:String jsonString = JSON.toJSONString(user);

    B. 反序列化一个JSON字符串成Java对象:

      User user = JSON.parseObject(jsonString, User.class);

      List<User> userList = JSON.parseArray(jsonStringArray, User.class)。

    C. $ref重复引用问题

复制代码
LogDTO logDTO = new LogDTO();
LogDTO.User user = logDTO.new User();
user.setName("123");
logDTO.setUser(user);
List<LogDTO> list = new ArrayList<>();
for (int i = 0; i <= 2; i++) {
LogDTO logDTO1 = new LogDTO();
BeanUtils.copyProperties(logDTO, logDTO1);
logDTO1.setTid(String.valueOf(i));
list.add(logDTO1);
}
System.out.println(JSON.toJSONString(list));
复制代码

   解决办法:JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect)

 

二、XML

  1. 作用:XML是一个可扩展标记预言,用来进行数据交换,支持跨平台,常见解析方式有DOM、SAX、DOM4J、JDOM等;

  2. DOM解析

    A. 特点:

      树结构,方便遍历,可以随机访问某一个节点;

      数据是一次性读取到内存中。

  3. SAX解析

    A. 特点:

      采用事件驱动模式,占用内存小;

      不能对xml进行修改。

  4. DOM4J解析

    A. 特点:性能优异,灵活性好且功能强大,是第三方开源的解析工具。

  5. JDOM解析

     A. 特点:使用的是类而非接口。

  可参考:Java解析XML(4种方法)

 

可参考:JSON类库的技术比较

    Jackson常用注解

    SpringBoot Jackson配置

    Fastjson官网地址

posted @   如幻行云  阅读(881)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示