Fastjson实用工具类,List转JSONString,List转JSONArray,JSONArray转List,JSONArray转ArrayList,JSONObject转HashMap

  • 问题背景
  • Fastjson转换
  • 心得
  • Lyric:我们拥有

问题背景

因为经常用到fastjson,但fastjson里面有些转换没有,自己写了一个工具类,方便快捷进行转换
注意事项:

  • 添加fastjson和common-lang3的依赖包
  • 可以直接复制文中的代码,也可以下载源码进行参考

Fastjson转换

1 FastjsonUtils工具转换类

package com.yg.fastjson.utils;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;import java.util.*;/*** @Author suolong* @Date 2022/3/19 11:24* @Version 1.5*/
@Slf4j
public final class FastjsonUtils {//fastjson格式转换器private static SerializeConfig config;static {config = new SerializeConfig();config.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));}private static final SerializerFeature[] features = {// 输出空置字段SerializerFeature.WriteMapNullValue,// list字段如果为null,输出为[],而不是nullSerializerFeature.WriteNullListAsEmpty,// 数值字段如果为null,输出为0,而不是nullSerializerFeature.WriteNullNumberAsZero,// Boolean字段如果为null,输出为false,而不是nullSerializerFeature.WriteNullBooleanAsFalse,// 字符类型字段如果为null,输出为"",而不是nullSerializerFeature.WriteNullStringAsEmpty};/*** Object TO Json String 字符串输出*/public static String toJSONString(Object object) {try {return JSON.toJSONString(object, config, features);} catch (Exception e) {log.error("JsonUtil | method=toJSON() | 对象转为Json字符串 Error!" + e.getMessage(), e);}return null;}/*** Object TO Json String Json-lib兼容的日期输出格式*/public static String toJSONLib(Object object) {try {return JSON.toJSONString(object, config, features);} catch (Exception e) {log.error("JsonUtil | method=toJSONLib() | 对象转为Json字符串 Json-lib兼容的日期输出格式   Error!" + e.getMessage(), e);}return null;}/*** 转换为数组 Object*/public static Object[] toArray(String text) {try {return toArray(text, null);} catch (Exception e) {log.error("JsonUtil | method=toArray() | 将json格式的数据转换为数组 Object  Error!" + e.getMessage(), e);}return null;}/*** 转换为数组 (可指定类型)*/public static <T> Object[] toArray(String text, Class<T> clazz) {try {return JSON.parseArray(text, clazz).toArray();} catch (Exception e) {log.error("JsonUtil | method=toArray() | 将json格式的数据转换为数组 (可指定类型)   Error!" + e.getMessage(), e);}return null;}/*** List转换为JSONArray*/public static JSONArray toJSONArray(List<?> list) {try {String json = toJSONString(list);return JSONArray.parseArray(json);} catch (Exception e) {log.error("JsonUtil | method=toJSONArray() | 将list格式的数据转换为JSONArray Object  Error!" + e.getMessage(), e);}return null;}/*** 重载类型为String* Json 转为 Jave Bean, 再使用Bean类型进行强转*/public static <T> T toBean(String text, Class<T> clazz) {try {return JSON.parseObject(text, clazz);} catch (Exception e) {log.error("JsonUtil | method=toBean() | Json 转为  Jave Bean  Error!" + e.getMessage(), e);}return null;}/*** 重载类型为JSONObject* Json 转为 Jave Bean, 再使用Bean类型进行强转*/public static <T> T toBean(JSONObject text, Class<T> clazz) {try {String json = toJSONString(text);return toBean(json, clazz);} catch (Exception e) {log.error("JsonUtil | method=toBean() | Json 转为  Jave Bean  Error!" + e.getMessage(), e);}return null;}/*** 重载类型为String* Json 转为 Map,JSON.parseObject转换的类型为JSONObject,但是JSONObject实现了Map接口*/public static Map<?, ?> toMap(String json) {try {return JSON.parseObject(json);} catch (Exception e) {log.error("JsonUtil | method=toMap() | Json 转为   Map {},{}" + e.getMessage(), e);}return null;}/*** 重载类型为JSONObject* Json 转为 Map,JSON.parseObject转换的类型为JSONObject,但是JSONObject实现了Map接口*/public static Map<?, ?> toMap(JSONObject json) {try {return JSON.parseObject(JSON.toJSONString(json));} catch (Exception e) {log.error("JsonUtil | method=toMap() | Json 转为   Map {},{}" + e.getMessage(), e);}return null;}/*** 重载类型为String* Json 转为 Map,JSON.parseObject转换的类型为JSONObject,但是JSONObject实现了Map接口*/public static HashMap<?, ?> toHashMap(String json) {try {Map<?, ?> map = toMap(json);return new HashMap<>(map);} catch (Exception e) {log.error("JsonUtil | method=toMap() | Json 转为   Map {},{}" + e.getMessage(), e);}return null;}/*** 重载类型为JSONObject* Json 转为 Map,JSON.parseObject转换的类型为JSONObject,但是JSONObject实现了Map接口*/public static HashMap<?, ?> toHashMap(JSONObject json) {try {Map<?, ?> map = toMap(json);return new HashMap<>(map);} catch (Exception e) {log.error("JsonUtil | method=toMap() | Json 转为   Map {},{}" + e.getMessage(), e);}return null;}/*** 重载类型为String* Json 转 List,Class 集合中泛型的类型,非集合本身,可json-lib兼容的日期格式*/public static <T> List<T> toList(String text, Class<T> clazz) {try {return JSON.parseArray(text, clazz);} catch (Exception e) {log.error("JsonUtil | method=toList() | Json 转为   List {},{}" + e.getMessage(), e);}return null;}/*** 重载类型为JSONObject* Json 转 List,Class 集合中泛型的类型,非集合本身,可json-lib兼容的日期格式*/public static <T> List<T> toList(JSONArray text, Class<T> clazz) {try {String json = toJSONString(text);return toList(json, clazz);} catch (Exception e) {log.error("JsonUtil | method=toList() | Json 转为   List {},{}" + e.getMessage(), e);}return null;}/*** 重载类型为String* Json 转 List,Class 集合中泛型的类型,非集合本身,可json-lib兼容的日期格式*/public static <T> ArrayList<T> toArrayList(String text, Class<T> clazz) {try {List<T> list = toList(text, clazz);assert list != null;return new ArrayList<>(list);} catch (Exception e) {log.error("JsonUtil | method=toList() | Json 转为   List {},{}" + e.getMessage(), e);}return null;}/*** 重载类型为JSONObject,clazz为list里面的类型* Json 转 List,Class 集合中泛型的类型,非集合本身,可json-lib兼容的日期格式*/public static <T> ArrayList<T> toArrayList(JSONArray text, Class<T> clazz) {try {List<T> list = toList(text, clazz);assert list != null;return new ArrayList<>(list);} catch (Exception e) {log.error("JsonUtil | method=toList() | Json 转为   List {},{}" + e.getMessage(), e);}return null;}/*** 重载类型为String* 从json字符串获取指定key的字符串*/public static Object getValueFromJson(final String json, final String key) {try {if (StringUtils.isBlank(json) || StringUtils.isBlank(key)) {return null;}return JSON.parseObject(json).getString(key);} catch (Exception e) {log.error("JsonUtil | method=getStringFromJson() | 从json获取指定key的字符串 Error!" + e.getMessage(), e);}return null;}/*** 重载类型为JSONObject* 从json字符串获取指定key的字符串*/public static Object getValueFromJson(final JSONObject json, final String key) {try {String text = toJSONString(json);return getValueFromJson(text, key);} catch (Exception e) {log.error("JsonUtil | method=getStringFromJson() | 从json获取指定key的字符串 Error!" + e.getMessage(), e);}return null;}
}

2 测试main函数

package com.yg.fastjson.service;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yg.fastjson.response.Response;
import com.yg.fastjson.utils.FastjsonUtils;
import com.yg.fastjson.utils.JsonUtils;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @Author suolong* @Date 2022/3/18 17:55* @Version 1.0*/
public class FastjsonTest {public static void main(String[] args) {List<HashMap<Integer, Integer>> arrayList = new ArrayList<>();for (int i = 0; i < 5; i++) {HashMap<Integer, Integer> hashMap = new HashMap<>();hashMap.put(i + 11, i + 10);hashMap.put(i + 21, i + 10);hashMap.put(i + 31, i + 10);arrayList.add(hashMap);}//将List转为JSONStringString jsonString = FastjsonUtils.toJSONString(arrayList);System.out.println(jsonString);//将List转为JSONArrayJSONArray jsonArray = FastjsonUtils.toJSONArray(arrayList);System.out.println(jsonArray.toString());//将JSONArray转为ListList<HashMap>  hpList= FastjsonUtils.toList(jsonArray, HashMap.class);System.out.println(hpList.get(0).getClass());//将JSONArray转为ArrayListArrayList<HashMap> arrayList1 = FastjsonUtils.toArrayList(jsonArray, HashMap.class);System.out.println(arrayList1.get(0).get(11+""));//将string转为beanResponse<String> boy = Response.success("you are a cool boy");String s = JSON.toJSONString(boy);Response response = FastjsonUtils.toBean(s, Response.class);System.out.println(response);}
}

3 代码中测试Bean转换的response类

package com.yg.fastjson.response;import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;public class Response<T> implements Serializable {private static final long serialVersionUID = -1222614520893986846L;private T data;/*** 错误码*/private String code;/*** 错误信息*/private String msg;public Response() {}public Response(T data, String code, String msg) {this.data = data;this.code = code;this.msg = msg;}public T getData() {return data;}public void setData(T data) {this.data = data;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public static <T> Response<T> success(T data){return new Response<T>(data, ResponseCode.SUCESS, "ok");}public static <T> Response<T> success(T data, ResultCode resultCode){return new Response<T>(data, resultCode.getCode(), resultCode.getMsg());}public static <T> Response<T> notFound(){return new Response<T>(null, ResponseCode.FAIL, "server error");}//    public static <T> Response<T> internalError(){//        return new Response<T>(null, ResultCode.CODE_98.getCode(), ResultCode.CODE_98.getMsg());
//    }/*** 系统异常,为了不影响客户,返回数据未查的* @param <T>* @return*/public static <T> Response<T> internalError(){return new Response<T>(null, ResultCode.CODE_02.getCode(), ResultCode.CODE_02.getMsg());}public static <T> Response<T> internalError(String msg){//setResponseStatus(500);return new Response<T>(null, ResponseCode.FAIL, msg);}public static <T> Response<T> needLoginError(String msg){setResponseStatus(500);return new Response<T>(null, ResponseCode.NEEDLOGIN, msg);}private static void setResponseStatus(int i) {ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();if (servletRequestAttributes == null) {//log.warn("failed to set response, because can't get HttpServletResponse");return;}final HttpServletResponse response = servletRequestAttributes.getResponse();if (response == null) {//log.warn("failed to set response, because can't get HttpServletResponse");return;}response.setStatus(i);}@Overridepublic String toString() {return "Response [data:" + data + ", code:" + code + ", message:" + msg + "]";}}
package com.yg.fastjson.response;public class ResponseCode {/*** 表明该请求被成功地完成,所请求的资源发送到客户端。*/public static final String SUCESS = "200";/*** 系统执行错误*/public static final String FAIL = "500";/*** 系统执行错误*/public static final String NEEDLOGIN = "401";}
package com.yg.fastjson.response;public enum ResultCode {//00:成功,01:入参存在非法null,02:数据未查得,98:系统异常CODE_00("00","成功"),CODE_01("01","入参存在非法null"),CODE_02("02","数据未查得"),CODE_03("03","非规定的调用时间"),CODE_98("98","系统异常"),CODE_401("401","未登录");private String code;private String msg;ResultCode(String code, String msg) {this.code = code;this.msg = msg;}public String getCode() {return code;}public String getMsg() {return msg;}
}

心得

  • 这个工具类挺好用的,有新的转法我会及时更新

作为程序员第 78 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …

Lyric:我们拥有

Fastjson实用工具类,List转JSONString,List转JSONArray,JSONArray转List,JSONArray转ArrayList,JSONObject转HashMap相关推荐

  1. Boost 库中的实用工具类使用入门

    简介: 实用工具类开发和维护会耗费程序员的时间.Boost 通过提供几个高质量的库,从而简化了此过程,您可以将这些库轻松集成到现有的代码库中.本文简单概述一些较流行的 Boost 实用工具类,并帮助您 ...

  2. java Http消息传递之POST和GET两种方法--通过实用工具类来获取服务器资源

    实现该方法需要导入一些jar包 可以去一下地址下载: http://pan.baidu.com/s/1hqrJF7m /** * 实用工具类来获取服务器资源 * * get方法传送数据 * * 1.通 ...

  3. 分页封装实用工具类及其使用方法

    分页封装实用工具类及其使用方法 作者: javaboy2012 Email:yanek@163.com qq:    1046011462 package com.yanek.util; import ...

  4. 这7个实用工具类网站,你用过几个?

    作为一个工具狂,搜罗了超多好用的工具网站,今天给大家分享7个实用的工具类网站,可以解决大家很多问题,堪称效率提升利器. 1.UU在线工具 工欲善其事必先利其器,UU在线工具是一个工具聚合网站,里面聚合 ...

  5. iOS开发实用工具类,助你开发一臂之力

    本工具类是我经多年多项目多场景总结出来的一个满足你在任何一个项目都能使用到的一些实用方法类,使用起来超级简单,能帮助你在开发过程中节省很多时间,只需找到对应方法直接调用即可,废话少说下面就看看有哪些实 ...

  6. java实用工具类——java处理对象转json工具类

    一.引言 json字符串现在是项目中很常用的了,尤其是在写接口返回数据一般都是json格式的.小编最近在看项目中,发现有多处地方用到了java对象转json,但是引用的jar包都是不统一的. 常见的有 ...

  7. 工具类的方法怎么引用_Java实用工具类:File工具类方法学习,可创建目录及文件...

    开发项目过程中,会用到很多工具类,今天分享一个Java中File操作工具类,可以帮你节约时间,提高开发效率. File工具类 public class CreateFileUtil { public ...

  8. ad file type not recognised_Java实用工具类:File工具类方法学习,可创建目录及文件...

    开发项目过程中,会用到很多工具类,今天分享一个Java中File操作工具类,可以帮你节约时间,提高开发效率. File工具类 public class CreateFileUtil { public ...

  9. 实用工具类APP,海外大有可为

    [CSDN 编者按]应用商店中的实用性工具一直是一类小众工具,然而在众多出海企业中,这些实用工具却成为他们开辟市场的精准切入点. 还在等什么,快来参与吧-

  10. Java实用工具类-将汉字转为拼音

    1. 导入对应的jar包 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j ...

最新文章

  1. GCC编译选项--创建与使用库
  2. 关于python中requests模块导入问题-python中requests模块的使用方法
  3. python第三方库是什么意思-python标准库和第三方库的区别
  4. Akka并发编程——第七节:Actor模型(六)
  5. [蓝桥杯][2019年第十届真题]修改数组(并查集)
  6. 感觉csdn论坛不是很好用,感觉……
  7. MySQL反斜杠 ‘\\‘ 插入数据库丢失
  8. 【代码规范】Google C++开源风格指南
  9. Windows系统镜像、PE系统下载地址大全
  10. 想用html5改写妄撮
  11. 网络工程师(中级)知识点记录
  12. java读txt文件乱码_java读取txt文件时出现中文乱码怎么解决
  13. Windows Server 2012R2 启用网络发现失败
  14. 我把海外抖音TikTok当副业,一周赚了7000块:想给有梦想的人提个醒!
  15. 【荐藏】代谢组学分析系列
  16. 亚马逊买家账号注册需要注意什么?
  17. 本版1年以内的所有 面经题目
  18. java picked up,抑制“Picked up _JAVA_OPTIONS”信息
  19. 网上推广平台如何打造商家品牌形象?
  20. Android 12 分屏模式配置

热门文章

  1. WebStorm常用插件推荐
  2. HaaS EDU场景式应用学习 - 光照信息屏
  3. Java课设——文本编辑器
  4. virtuoso配合calibre进行电路后仿真
  5. nsis升级包_NSIS v3.2.0.1-简易封包工具
  6. NSIS中文用户手册下载(免费下载)
  7. protel元件封装总结
  8. VS2005 SP1补丁下载与安装
  9. GPS研究---GPS 数据格式
  10. html网页静态时钟代码,网页时钟实现代码html5