文件解析__JSON解析
JSON解析1.Java解析JSON2.Fastjson(阿里巴巴开源的JSON解析库3.Fastjson主要对象:JSON、JSONObject类、JSONArray类4.常见问题以及解决方法问题1:FastJson默认过滤null值,不显示null值字段问题2:控制JSON字段顺序问题3:控制JSON的Date字段格式...
一、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<T> clazz)
(3)JSONArray类
主要用于封装数组集合类的数据,继承自ArrayList类
- 将JSON格式的数据,转换成指定的泛型集合:JSON.parseArray(String text,Class<T> clazz
4.常见问题
问题1:FastJson默认过滤null值,不显示null值字段
Map<String, Object> map = new HashMap<String, Object>(){
{
put("age", 18);
put("name", "张三");
put("sex", null);
}
};
System.out.println(JSONObject.toJSONString(map));
输出结果 :
{"name":"张三","age":18}
【解决】:转换成JSON字符串时,使用Feature枚举值进行设置
Map<String, Object> map = new HashMap<String, Object>(){
{
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;
}
更多推荐
所有评论(0)