json-lib——JsonConfig详细使用说明

2024-02-15 20:20

本文主要是介绍json-lib——JsonConfig详细使用说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在使用json-lib包中JSONObject.fromObject(bean,cfg)时,可能出现以下几种情况:

1、(防止自包含)转换的对象包含自身对象,或者对象A下面挂了对象B,对象B下面又挂了对象A,如果不设置取消环形结构,则那么会抛异常:”There is a cycle in the hierarchy!”

解决方法:

  在调用JSONObject.fromObject(bean,cfg)时,自定义JsonConfig:

JsonConfig cfg = new JsonConfig();
cfg.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

然后将cfg对象传入fromObject方法中,这样,对象B下面挂的对象A就会被置为NULL。

2、(Date类型转化)JavaBean出现Date格式时,转化成json时会出现将其转化为:{“date”:6,”day”:3,”hours”:21,”minutes”:26,”month”:0,”nanos”:290000000,”seconds”:31,”time”:1452086791290,”timezoneOffset”:-480,”year”:116},这个不易处理,如果需要将Date转换为我们认识的“yyyy-MM-dd”格式,则需要自行创建时间转换器,并实现json-lib中的JsonValueProcessor接口,实现该接口中的两个方法(processArrayValue和processObjectValue):

public class JsonDateValueProcessor implements JsonValueProcessor {  private String format ="yyyy-MM-dd";  public JsonDateValueProcessor() {  super();  }  public JsonDateValueProcessor(String format) {  super();  this.format = format;  }  @Override  public Object processArrayValue(Object paramObject,  JsonConfig paramJsonConfig) {  return process(paramObject);  }  @Override  public Object processObjectValue(String paramString, Object paramObject,  JsonConfig paramJsonConfig) {  return process(paramObject);  }  private Object process(Object value){  if(value instanceof Date){    SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);    return sdf.format(value);  }    return value == null ? "" : value.toString();    }  }  

  cfg.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());

  这样,对象下面如果有Date类型,转化出来变为“yyyy-MM-dd”格式。

3、(字段过滤)如果需要在转化过程中去除某些字段,则需要定义一些Excludes字段,具体使用如下:

String[] EXCLUDES = new String[]{"A","B","C"};cfg.setExcludes(EXCLUDES);  

  这样,对象转化时,”A”,”B”,”C”会被去除,对象中这些字段转成json时会被删除。

4、(过滤器PropertyFilter使用)和3有点类似,但是PropertyFilter作用是为了过滤某些符合一些指定条件的属性,如:

cfg.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
return value == null;//value为null时返回true,返回true的就是需要过滤调的
}
});

这样,对象转化出来后,生成的 json 字符串只包含非空的值。

5、其余的常见用法:

cfg.setIgnoreDefaultExcludes(true); //默认为false,即过滤默认的key,改为true则不忽略
cfg.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true)); // 忽略掉集合对象
cfg.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true, new String[]{“name”})); // 忽略掉name属性及集合对象

推广

新款厨房卧室橱柜贴纸,大量有货,支持分销代销,分享此内容到朋友圈,凭截图找卖家免费领取保温杯一个(包邮),活动真实有效,每天只有前60个名额,发货领取奖品请扫码联系店主
这里写图片描述

这篇关于json-lib——JsonConfig详细使用说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712434

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.