package cn.topcheer.landTax.filter; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.PropertyPreFilter; import com.alibaba.fastjson.serializer.SerializerFeature; /** * @author :晨风²º¹³ <br> * @Comment : fastjson 针对类型的属性选择过滤器(可以跨层级) <br> */ public class ComplexPropertyPreFilter implements PropertyPreFilter { private Map<Class<?>, String[]> includes = new HashMap<Class<?>, String[]>(); private Map<Class<?>, String[]> excludes = new HashMap<Class<?>, String[]>(); static { JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask(); } public ComplexPropertyPreFilter() { } public ComplexPropertyPreFilter(Map<Class<?>, String[]> includes) { super(); this.includes = includes; } public boolean apply(JSONSerializer serializer, Object source, String name) { //对象为空。直接放行 if (source == null) { return true; } // 获取当前需要序列化的对象的类对象 Class<?> clazz = source.getClass(); // 无需序列的对象、寻找需要过滤的对象,可以提高查找层级 // 找到不需要的序列化的类型 for (Map.Entry<Class<?>, String[]> item : this.excludes.entrySet()) { // isAssignableFrom(),用来判断类型间是否有继承关系 if (item.getKey().isAssignableFrom(clazz)) { String[] strs = item.getValue(); // 该类型下 此 name 值无需序列化 if (isHave(strs, name)) { return false; } } } // 需要序列的对象集合为空 表示 全部需要序列化 if (this.includes.isEmpty()) { return true; } // 需要序列的对象 // 找到不需要的序列化的类型 for (Map.Entry<Class<?>, String[]> item : this.includes.entrySet()) { // isAssignableFrom(),用来判断类型间是否有继承关系 if (item.getKey().isAssignableFrom(clazz)) { String[] strs = item.getValue(); // 该类型下 此 name 值无需序列化 if (isHave(strs, name)) { return true; } } } return false; } /* * 此方法有两个参数,第一个是要查找的字符串数组,第二个是要查找的字符或字符串 */ public static boolean isHave(String[] strs, String s) { for (int i = 0; i < strs.length; i++) { // 循环查找字符串数组中的每个字符串中是否包含所有查找的内容 if (strs[i].equals(s)) { // 查找到了就返回真,不在继续查询 return true; } } // 没找到返回false return false; } public Map<Class<?>, String[]> getIncludes() { return includes; } public void setIncludes(Map<Class<?>, String[]> includes) { this.includes = includes; } public Map<Class<?>, String[]> getExcludes() { return excludes; } public void setExcludes(Map<Class<?>, String[]> excludes) { this.excludes = excludes; } }
使用其过滤器
Map<Class<?>, String[]> map = new HashMap<Class<?>, String[]>(); map.put(Area.class, new String[]{"id","name","area"}); ComplexPropertyPreFilter ss = new ComplexPropertyPreFilter(map); String ddd = JSONArray.toJSONString(list,ss);
其结果:
[ { "id": "420000", "name": "湖北省" }, { "area": { "id": "420000", "name": "湖北省" }, "id": "420051", "name": "省直属局" }, { "area": { "id": "420000", "name": "湖北省" }, "id": "420100", "name": "武汉市" }, { "area": { "area": { "id": "420000", "name": "湖北省" }, "id": "420100", "name": "武汉市" }, "id": "420101", "name": "武汉市直属" }, { "area": { "area": { "id": "420000", "name": "湖北省" }, "id": "420100", "name": "武汉市" }, "id": "420102", "name": "江岸区" }]
相关推荐
以下是 FastJson 属性的一些详细说明: 1. **QuoteFieldNames**:默认为 true,这意味着在序列化时,JSON 的键会被包裹在双引号中。如果你希望使用单引号,可以设置为 false,并使用 `UseSingleQuotes`。 2. **...
FastJson调整实体类中属性输出的顺序,字段为空的时候仍然输出,有时候如果不输出空的字段,导致字段缺失在做判断的时候,获取某个字段就会报错,而对于输出顺序的重要性,就是 如果没有顺序,那么数据,在输出到别的接口的...
标题中的“fastjson定制工程,别名配置化”指的是对Fastjson库的扩展,使其能够支持动态配置字段别名,而不是像原生Fastjson那样只能硬编码(hardcode)在代码中。这样的改进对于处理与第三方接口交互时,字段名称...
在IT领域,尤其是在Java Web开发中,`SpringMVC`、`Spring`、`Hibernate`以及`Ehcache`和`Fastjson`是常见的技术组件,它们分别在不同的层面上发挥着关键作用。以下是这些技术的详细介绍: 1. **SpringMVC**: ...
fastjson-1.1.35.jar ,fastjson-1.1.36.jar ,fastjson-1.1.37.jar ,fastjson-1.1.44.jar ,fastjson-1.2.3.jar,fastjson-1.2.4.jar
转换器FastJSON
- **过滤器**: 可以通过`JSONFilter`实现序列化和反序列化时的数据过滤,对敏感信息进行处理。 - **日期格式化**: 自定义日期格式,如`JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat, new ...
《深入理解Fastjson:阿里巴巴的高效JSON库》 在当今的软件开发中,JSON作为一种轻量级的数据交换格式,被广泛应用于服务器与客户端之间的数据传输。而Fastjson,由阿里巴巴公司开发,是一款性能优秀且易用的Java...
《FastJsonJar:Java开发中的高效JSON处理库》 FastJsonJar,正如其名,是一个专为Java开发者设计的高效JSON解析和生成工具。在现代Web服务和移动应用开发中,JSON作为数据交换格式,其使用频率之高不言而喻。...
首先,Fastjson作为一个JSON解析器,其核心功能包括JSON字符串到Java对象的解析和Java对象到JSON字符串的序列化。这使得开发者能够轻松地在JSON数据和Java对象之间进行转换,极大地简化了数据处理的过程。例如,通过...
**FastJson:一个高效、强大的Java JSON库** FastJson是阿里巴巴开源的一款高性能的JSON库,它主要用于Java对象与JSON字符串之间的转换。在这个小例子中,我们将深入探讨FastJson的使用方法,以及它如何帮助开发者...
springboot完美整合shiro、ehcache、redis、spring data jpa,swagger、fastjson,后续继续补充,适合初中级开发练习掌握框架,代码下载可直接运行,测试已通过
在Android开发中,数据交换和序列化是常见的需求,FastJSON是阿里巴巴提供的一款高效、功能丰富的JSON库,它被广泛应用于Android Studio项目中。本文将详细介绍如何在Android Studio中使用FastJSON进行JSON解析和...
- **自定义转换器**:对于复杂的类型转换需求,Fastjson允许用户自定义`SerializerFeature`和`DeserializerFeature`,实现个性化处理。 4. **安全特性** - **SQL注入防护**:Fastjson 1.2.66版加强了对SQL注入的...
**FastJSON for C#:深度解析与应用** FastJSON 是一个高效的 JSON 序列化和反序列化库,尤其在C#开发环境中被广泛应用。它以其轻量级、快速和简单的特点,使得处理JSON数据变得极其便捷。在这个最新的版本 v2.1.18...
**Fastjson:一个高效、强大的Java JSON库** Fastjson是阿里巴巴开发的一个开源项目,它是一个Java语言编写的高性能功能完备的JSON库。Fastjson能够将Java对象转换为JSON字符串,也能将JSON内容转换为对应的Java...
FastJSON是阿里巴巴开发的一款高效的Java JSON库,它在处理JSON数据方面表现卓越,因其轻量级、快速且功能丰富的特性而备受青睐。标题中的"fastjson1.2.2版本.jar"指的是FastJSON库的1.2.2版本的Java Archive(JAR)...
阿里Fastjson是一个高性能的Java JSON库,由阿里巴巴公司开发并维护。它被广泛应用于各种Java项目中,尤其在数据解析和序列化方面表现卓越。Fastjson的命名来源于"Fast Java Object to JSON",即快速地将Java对象...
快速JSON(Fastjson)是阿里巴巴开发的一个高性能的Java JSON库,它能解析JSON格式的数据,并将其转换为Java对象,反之亦然。Fastjson以其高效、轻量级的特点,在Java开发中广泛应用于数据交换和序列化场景。这个...
**Fastjson 深度解析** Fastjson 是阿里巴巴开源的一款高效、功能强大的 JSON 库,它主要用于 Java 和 Android 平台。在标题“fastjson1.2.2.rar”和描述中,我们可以推断出这是一个关于 Fastjson 版本 1.2.2 的...