FastJson:JSON JSONObject JSONArray详解以及SimplePropertyPreFilter 的介绍
FastJson:JSON JSONObject JSONArray详解以及SimplePropertyPreFilter 的介绍
FastJson是阿里巴巴开发的一款专门用于Java开发的包,实现Json对象,JavaBean对,Json字符串之间的转换。
文章目录
- FastJson:JSON JSONObject JSONArray详解以及SimplePropertyPreFilter 的介绍
- 一、JSON对象介绍
- 二、FastJson-JSON
- 三、FastJson-JSONObject
- 四、FastJson-JSONArray
- 五、常用方法汇总
- 常用方法
- 简单说一下FastJSON的JSON过滤器
一、JSON对象介绍
JSON的特点如下:
- 数据在花括号中。
- 数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)。
- 每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号)。
例:
普通Json对象
{
"ID": 1001,
"name": "张三",
"age": 24
}
数组Json对象
[
{"ID": 1001, "name": "张三", "age": 24},
{"ID": 1002, "name": "李四", "age": 25},
{"ID": 1003, "name": "王五", "age": 22}
]
复杂Json对象
{
"部门名称":"研发部",
"部门成员":[
{"ID": 1001, "name": "张三", "age": 24},
{"ID": 1002, "name": "李四", "age": 25},
{"ID": 1003, "name": "王五", "age": 22}],
"部门位置":"xx楼21号"
}
二、FastJson-JSON
JSON是一个抽象类并且实现了JSONStreamAware, JSONAware接口,提供了JSON转换的方法(详细方法说明看后文)。
JSON多用于JavaBean->JSONString 或者 JSONString->javaJSON
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentEntity {
@JSONField(name = "student_name",ordinal = 1)
private String name;
@JSONField(name = "student_age",ordinal = 2)
private Integer age;
}
@Test
public void beanJsonTest() {
StudentEntity student = StudentEntity.builder().name("张三").age(18).build();
String jsonStudentString = JSON.toJSONString(student); //{"student_name":"张三","student_age":18}
StudentEntity studentObject = JSON.parseObject(jsonStudentString, StudentEntity.class); //转为java对象
}
三、FastJson-JSONObject
JSONObject继承了JSON并实现了Map接口。
底层是个Map集合,多用于操作JSONObject 如取属性等,Map集合的功能也都有。
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentEntity {
@JSONField(name = "student_name",ordinal = 1)
private String name;
@JSONField(name = "student_age",ordinal = 2)
private Integer age;
}
@Test
public void beanJsonTest() {
StudentEntity student = StudentEntity.builder().name("张三").age(18).build();
String jsonStudentString = JSON.toJSONString(student); //{"student_name":"张三","student_age":18}
/**
Map<String,Object> map = new HashMap<>();
map.put("student_name", "李四");
map.put("student_age", 19);
map.put("date",students);
JSONObject jsonObject = new JSONObject(map);
**/
JSONObject jsonObject = JSONObject.parseObject(jsonStudentString); //{"student_name":"张三","student_age":18}
jsonObject.put("student_name", "李四");
jsonObject.put("student_age", 19);//{"student_name":"李四","student_age":19}
jsonObject.put("date",student);//{"student_name":"张三","student_age":18,"date":[{"student_name":"张三","student_age":18},{"student_name":"张三","student_age":18},{"student_name":"张三","student_age":18}]}
//get方法 根据key取出value
StudentEntity date = jsonObject.getObject("date", StudentEntity.class);
String studentName = jsonObject.getObject("student_name", String.class);
jsonObject.getString("student_name");
}
四、FastJson-JSONArray
JSONObject继承了JSON并实现了List接口。
底层是个ArrayList,多用于用于操作JSONArray 比如遍历等,通常与JSONObject联合使用。
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentEntity {
@JSONField(name = "student_name",ordinal = 1)
private String name;
@JSONField(name = "student_age",ordinal = 2)
private Integer age;
}
@Test
public void twoTest3() {
StudentEntity student1 = StudentEntity.builder().name("张三").age(18).build();
StudentEntity student2 = StudentEntity.builder().name("张三").age(18).build();
StudentEntity student3 = StudentEntity.builder().name("张三").age(18).build();
ArrayList<StudentEntity> students = Lists.newArrayList(student1, student2, student3);
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(students));
jsonArray.forEach(item -> {
String jsonStudentStringItem = JSONObject.toJSONString(item);
System.out.println(jsonStudentStringItem);
});
//{"student_name":"张三","student_age":18}
//{"student_name":"张三","student_age":18}
//{"student_name":"张三","student_age":18}
JSONObject StudentJson = new JSONObject();
StudentJson.put("Student",jsonArray);
System.out.println(StudentJson.toJSONString());
}
五、常用方法汇总
常用方法
/**
* FastJson常用方法
*/
@Test
public void fastJSONTest() {
StudentEntity student = StudentEntity.builder().name("张三").age(18).build();
//1.JSON常用方法
//1.1 toJSONString :将java对象转为JSONString
String jsonStudentString = JSON.toJSONString(student);//{"student_name":"张三","student_age":18}
//1.2 parseObject :将JSONString转为java对象
StudentEntity studentObject = JSON.parseObject(jsonStudentString, StudentEntity.class);//StudentEntity(name=张三, age=18)
// 1.3 JSONtoJSONBytes():将 Java 对象序列化为 JSON 字节数组
byte[] jsonStudentStringBytes = JSON.toJSONBytes(student);//[123, 34, 115, 116, 117, 100, 101, 110, 116, 95, 110, 97, 109, 101, 34, 58, 34, 228, 189, 254, 228, 184, 230, 34, 44, 34,115, 116, 117, 100, 101, ]
//1.4 JSONparseBytes():将 JSON 字节数组反序列化为 Java 对象
StudentEntity studentObject2 = JSON.parseObject(jsonStudentStringBytes, StudentEntity.class);
//1.5 JSON.parseObject:将Java对象转为JSONObject
JSONObject jsonObject = JSON.parseObject(jsonStudentString);
//2.JSONObject常用方法 JSONObject继承了JSON类,并实现了Map接口,所以可以调用JSON类中的方法,并且重写了Map相关方法
//2.1 JSONObject.toJSONString():将JSONObject转为JSONString
String jsonStudentString2 = jsonObject.toJSONString();//{"student_name":"张三","student_age":18}
//2.2 JSONObject.put():根据key设置value
jsonObject.put("STUDENT", StudentEntity.builder().name("王五").age(22).build());//{"student_name":"张三","student_age":18,"STUDENT":{"student_name":"王五","student_age":22}}
//2.3 JSONObject.getXxx():根据key取出value
String studentName = jsonObject.getString("student_name");//张三
Integer studentAge = jsonObject.getInteger("student_age");//18
/* String name = jsonObject.getObject("name", String.class);
Integer age = jsonObject.getObject("age", Integer.class);*/
StudentEntity studentObject3 = jsonObject.getObject("STUDENT", StudentEntity.class);//StudentEntity(name=王五, age=22)
//2.4 toJavaObject:将JSONObject转为Java对象
StudentEntity javaObject = jsonObject.toJavaObject(StudentEntity.class);
//2.5 putAll():合并两个JSONObject
String json1 = "{\"name\":\"Jack\"}";
String json2 = "{\"age\":35}";
JSONObject jsonObject1 = JSON.parseObject(json1);
JSONObject jsonObject2 = JSON.parseObject(json2);
JSONObject jsonObject3 = new JSONObject();
jsonObject3.putAll(jsonObject1);
jsonObject3.putAll(jsonObject2);//{"name":"Jack","age":35}
//2.6 isEmpty():判断JSONObject是否为空
boolean empty = jsonObject.isEmpty();
//containsKey() keySet() vlues() clear() remove() containsValue() 跟Map集合的方法一样 不在列举
//3.JSONArray常用方法
//3.1. parseArray:将Java对象转为JSONArray
StudentEntity student1 = StudentEntity.builder().name("张三1").age(18).build();
StudentEntity student2 = StudentEntity.builder().name("张三2").age(18).build();
StudentEntity student3 = StudentEntity.builder().name("张三3").age(18).build();
ArrayList<StudentEntity> studentEntities = Lists.newArrayList(student1, student2, student3);
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(studentEntities));//[{"student_name":"张三1","student_age":18},{"student_name":"张三2","student_age":18},{"student_name":"张三3","student_age":18}]
//3.2. toJSONString():将JSONArray转为JSONString
String jsonArrayString = jsonArray.toJSONString();//"[{"student_name":"张三1","student_age":18},{"student_name":"张三2","student_age":18},{"student_name":"张三3","student_age":18}]
//3.3. toJavaObject():将JSONArray转为Java对象
List<StudentEntity> studentEntities1 = jsonArray.toJavaList(StudentEntity.class);
// forEach(),fparallelStream(),stream(),spliterator(),iterator(),sort(),get()这些Arraylist方法同样都有,不在列举
}
简单说一下FastJSON的JSON过滤器
SimplePropertyPreFilter 简单过滤器
class Person {
public String name;
public int age;
}
@Test
public void toJSONStringWithFilterExample() {
Person person = new Person();
person.name = "Eve";
person.age = 40;
// SimplePropertyPreFilter类 实现 JSON字符串过滤
SimplePropertyPreFilter simplePropertyPreFilter1 = new SimplePropertyPreFilter();
//添加过滤字段
simplePropertyPreFilter1.getExcludes().add("age");//不包括 "age" 字段
//调用toJSONString将Java转String时传入过滤器
System.out.println(JSON.toJSONString(person, simplePropertyPreFilter1));//{"name":"Eve"}
//或者
SimplePropertyPreFilter simplePropertyPreFilter2 = new SimplePropertyPreFilter();
//添加保留字段
simplePropertyPreFilter2.getIncludes().add("name");//包括 "name" 字段
//调用toJSONString将Java转String时传入过滤器
System.out.println(JSON.toJSONString(person, simplePropertyPreFilter2));//{"name":"Eve"}
}
自定义过滤器
FastJson提供的简单过滤器很多时候无法满足我们需求,这个时候就可以自定义管理器
@Test
public void toJSONStringWithFilterExample2() {
Person person = new Person();
//1.实现 ValueFilter 接口 重写 process 方法
ValueFilter filter = (object, name, value) -> {
if (name.equals("age")) {
return null; // 不包括 "age" 字段
}
return value;
};
// 2.实现 PropertyFilter 接口 重写 apply 方法
PropertyFilter filter2 = (object, name, value) -> {
if (name.equals("age")) {
return false; // 不包括 "age" 字段
}
return true;
};
String jsonString1 = JSON.toJSONString(person, filter);//{"name":"Eve"}
String jsonString2 = JSON.toJSONString(person, filter2);//{"name":"Eve"}
}
当然还可以根据管理器实现原来去手搓来增填功能,深入了解推荐一篇文章
API接口使用Jackson序列化JSON数据动态过滤字段
原文地址:https://blog.csdn.net/qq_49474843/article/details/146299662
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/591699.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/591699.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!