`

JsonConfig之json格式化过滤属性

 
阅读更多

我们通常对一个Json串和java对象进行互转时,经常会有选择性的过滤掉一些属性值,而json-lib包中的JsonConfig为我们提供了这种功能,具体实现方法有以下几种。(1)建立JsonConfig实例,并配置属性排除列表,(2)用属性过滤器,(3)写一个自定义的 JsonBeanProcessor.

1. 实现JSONString接口的方法

public class Person implements JSONString { 
private String name; 
private String lastname; 
private Address address; 

// getters & setters 

public String toJSONString() {
return "{name:'"+name+"',lastname:'"+lastname+"'}";
}
}


2.第二种方法通过jsonconfig实例,对包含和需要排除的属性进行方便的添加或删除

public class Person { 
private String name; 
private String lastname; 
private Address address; 

// getters & setters 


JsonConfig jsonConfig = new JsonConfig(); 
jsonConfig.setExclusions( new String[]{"address"}); 
Person bean = new Person("jack","li"); 
JSON json = JSONSerializer.toJSON(bean, jsonConfig); 


3. 使用propertyFilter可以允许同时对需要排除的属性和类进行控制,这种控制还可以是双向的,也可以应用到json字符串到java对象

public class Person { 
private String name; 
private String lastname; 
private Address address; 

// getters & setters 


JsonConfig jsonConfig = new JsonConfig(); 
jsonConfig.setJsonPropertyFilter( new PropertyFilter(){ 

public boolean apply(Object source/* 属性的拥有者 */ , String name /*属性名字*/ , Object value/* 属性值 */ ){ 
// return true to skip name 
return source instanceof Person && name.equals("address"); 

}); 
Person bean = new Person("jack","li");
JSON json = JSONSerializer.toJSON( bean, jsonConfig ) 


4. 最后来看JsonBeanProcessor,这种方式和实现JsonString很类似,返回一个代表原来的domain类的合法JSONObject

public class Person { 
private String name; 
private String lastname; 
private Address address; 

// getters & setters 


JsonConfig jsonConfig = new JsonConfig(); 
jsonConfig.registerJsonBeanProcessor( Person.class, new JsonBeanProcessor(){ 

public JSONObject processBean( Object bean, JsonConfig jsonConfig ){ 
if(!(bean instanceof Person)){ 
return new JSONObject(true); 

Person person = (Person) bean; 
return new JSONObject() .element( "name", person.getName()) .element( "lastname", person.getLastname()); 

}); 


Person bean = new Person("jack","li");
JSON json = JSONSerializer.toJSON( bean, jsonConfig );

分享到:
评论

相关推荐

    json-lib 技术指南

    5. **过滤与格式化** JSON-lib 提供了 `PropertyFilter` 接口,可以用来控制哪些 JavaBean 属性会被包含在 JSON 或 XML 中。这可以通过 `JsonConfig` 配置实现。另外,`JSONSerializer` 的 `prettyPrint()` 方法...

    JSON--List集合转换成JSON对象详解

    文中提到使用JsonConfig来设置JsonPropertyFilter,这样可以在序列化过程中过滤掉不需要的属性或对象。这是一种更加精细的控制方式,可以避免在JSON中暴露不应该公开的数据。 5. Hibernate配置关系映射: 为了更好...

    JSON死循环解决办法

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后端数据传输。在使用Hibernate这样的ORM框架时,由于其懒加载机制,可能会遇到JSON序列化时的死循环问题。这是因为CGLIB动态代理生成...

    java与json之间的互操作[参照].pdf

    另外,通过设置`JsonConfig`对象,可以指定属性过滤器`PropertyFilter`,从而决定哪些属性应该被包含在JSON中。 7. **测试**:编写测试类,如`JsonlibTest`,使用JUnit进行单元测试,验证Java对象与JSON之间的转换...

    java与json之间的互操作

    可以通过`JsonConfig`类配置转换规则,例如定义自定义的`JsonValueProcessor`来处理特定类型的字段,或者使用`PropertyFilter`来过滤JSON序列化过程中不想包含的属性。 在实际应用中,除了JSON-lib之外,还有其他的...

    JS和JAVA使用JSON方法解析Word版.pdf

    在JavaScript中,`JSON.stringify()`方法还可以接受两个可选参数,用于格式化输出和过滤对象属性。例如: ```javascript var last = JSON.stringify(obj, null, 2); ``` 这将会创建一个带有缩进的JSON字符串,便于...

    ExtJS JSON使用手册

    9. **JSONConfig实例代码**:配置JSON解析时,可能需要创建一个配置对象,比如`JSONConfig`,来设定解析和序列化的特定行为,例如忽略某些字段、处理日期格式等。 10. **JSONObject实例代码**:实际编程中,会涉及...

    FastJsonTest.zip

    - **JSON格式校验**:FastJson提供了`JSONValidator`类,可以验证JSON字符串的合法性。 6. **性能优化** FastJson之所以性能出众,是因为它采用了优化的算法和数据结构。例如,使用了双引号池来减少字符串创建,...

    fastJSON文档

    FastJSON支持自定义转换规则,如日期格式化、枚举转换等: ```java JSONConfig config = new JSONConfig(); config.setDatePattern("yyyy-MM-dd"); String dateStr = JSON.toJSONString(date, config); ``` 2...

    fastjson

    - 使用`@JSONField(serializeUsing=XXX.class, deserializeUsing=XXX.class)`注解,自定义字段的序列化和反序列化逻辑。 2. 数据过滤 - `JSON.parseObject(String jsonString, TypeReference<T> typeReference, ...

    SpringBoot 定制化返回数据的实现示例

    SpringBoot 定制化返回数据...SpringBoot 定制化返回数据的实现示例,可以满足我们在实际开发中对返回数据的定制化需求,解决一些常见的问题,例如定制化字段名、日期类型的输出格式、过滤敏感字段、避免 null 输出等。

Global site tag (gtag.js) - Google Analytics