栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

文件解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

文件解析

一、JSON解析

1.简介:JSON是一种轻量级的数据交换格式

2.Java解析JSON:

    序列化:将Java对象转换成JSON格式的数据

    反序列化:将JSON格式的数据转换成Java对象

import com.alibaba.fastjson2.JSON;
import com.apesource.entity.PoliceStation;

public class Test01 {
	public static void main(String[] args) {
		 PoliceStation ps1 = new PoliceStation();
		 ps1.setName("电子城派出所");
		 ps1.setAddr("西安市电子二路7645号");
		 ps1.setTel("17762138888");
		 
		 // 序列化:将java对象转换成json格式的数据
		 String json1 = JSON.toJSONString(ps1);
		 System.out.println(json1);
		 
		 //反序列化
		 String jsonStr = "{"addr":"西安市电子二路7645号","name":"电子城派出所","tel":"17762138888"}";
		 PoliceStation ps2 = JSON.parseObject(jsonStr,PoliceStation.class);
		 System.out.println(ps2);	 
	}
}

输出结果: 

{"addr":"西安市电子二路7645号","name":"电子城派出所","tel":"17762138888"}
PoliceStation [name=电子城派出所, addr=西安市电子二路7645号, tel=17762138888]

面对以上需求,我们需要掌握如何使用第三方库来进行JSON格式数据的解析

3.最常用的第三方库:Fastjson(阿里巴巴开源的JSON解析库)

Fastjson主要对象:JSON、JSONObject、JSONArray

JSONObject和JSONArray继承JSON

(1)JSON类

  • 将Java对象"序列化"转换为JSON字符串:JSON.toString(Object object)
  • 将JSON字符串反序列化为Java对象:  JSON.parseObject(String text)                                                                                                    JSON.parseArray(String text)

(2)JSONObject类

主要封装key-value键值对数据,继承自LinkedHashMap接口 

  • 将JSON格式的数据,转换成指定的自定义实体类对象:                                                                                                                     JSON.parseObject(String text,Class  clazz) 

(3)JSONArray类

主要用于封装数组集合类的数据,继承自ArrayList类  

  •  将JSON格式的数据,转换成指定的泛型集合:JSON.parseArray(String text,Class clazz

4.常见问题

问题1:FastJson默认过滤null值,不显示null值字段

Map map = new HashMap(){
    {
        put("age", 18);
        put("name", "张三");
        put("sex", null);
    }
};
System.out.println(JSONObject.toJSONString(map));

  输出结果 :

{"name":"张三","age":18}

【解决】:转换成JSON字符串时,使用Feature枚举值进行设置 

Map map = new HashMap(){
    {
        put("age", 18);
        put("name", "张三");
        put("sex", null);
    }
};
// 使用Feature类型的枚举值进行设置
System.out.println(JSONObject.toJSONString(map,Feature.WriteMapNullValue));

 问题2:控制JSON字段顺序

【解决】:输出结果与字段定义顺序不一致。可以在定义实体类字段时,使用@JSONFied注解ordinal属性进行配置。

public class PoliceStation {
	@JSONField(ordinal = 1)
	private String name;
	
	@JSONField(ordinal = 2)
	private String addr;
	
	@JSONField(ordinal = 3)
	private String tel;
}

问题3:控制JSON的Date字段格式

【解决】:输出日期字段时,默认格式不符合需求时,可以在定义实体类的Date字段,使用@JSONField注解的format属性进行格式配置

// 订单类
public class Order{
	// 订单编号
	private String orderId;
	
	// 创建日期
	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
	private LocalDateTime creationTime;
}

 

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号