介绍

模板需求说明

  开发中经常遇到前端传递过来的JSON串的转换,后端需要解析成对象,有解析成List的,也有解析成Map的。
  我们对Fastjson并不陌生,Fastjson 是阿里巴巴的开源JSON解析库。Fastjson可以看解析JSON格式的字符串,支持后端将Java Bean序列化成JSON字符串供给前端使用,也可以从前端传递过来的JSON字符串反序列化成Java Bean供给后端逻辑使用。

Fastjson依赖

com.alibabafastjson1.2.70

低版本漏洞

  由于低版本(version <= 1.2.68)的fastjson存在远程代码执行漏洞,该bug可以被利用直接获取服务器权限。

漏洞修复方案

  引入高版本后(version >= 1.2.69),前后端交互的bean中会出现循环引用,因此我们需要在工程的Application类中main函数中添加以下代码禁止循环引用检测。

JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();

  除了引入高版本,我们还可以通过配置开启SafeMode来防护攻击,完全禁用autoType,无视白名单,这会对业务有一定影响。

ParserConfig.getGlobalInstance.setSafeMode(true);

解析模板

Response获取成String

  public static String getResponseAsString(final HttpResponse response) {try {return EntityUtils.toString(response.getEntity(), "UTF-8");    } catch (final ParseException e) {throw new RuntimeException(e);    } catch (final IOException e) {throw new RuntimeException(e);    }  }

JSON串解析

若已通过上述的Response方法转换成了String类型字符串为appsStr

JSON示例

JSON解析示例

JSON转换对象

try {//获取第一级对象    JSONObject appsJSONObject = JSON.parseObject(appsStr).getJSONObject("apps");//判断是否为空if (appsJSONObject == null || appsJSONObject .size() <= 0) {       log.info("json has no apps");    }//获取第二级对象数组JSONArray    JSONArray appJSONArray = appsJSONObject .getJSONArray("app");//转换成二级对象字符串    String appStr = JSON.toJSONString(appJSONArray );

//字符串转换成第二级对象数组List    List appList = new ArrayList<>();    appList = JSONObject.parseArray(appStr, Map.class);    log.info("length: {}", appList.size());} catch (Exception e) {    log.error(e.getMessage());  }

常用三类转换

转换bean对象

//其他方式获取到的Object对象Object obj = xxx;String responseStr = JSON.toJSONString(obj);XXXXBean xxxxBean = JSON.parseObject(responseStr, XXXXBean.class);

转换Map

Object obj = xxx;String responseStr = JSON.toJSONString(obj);Map map = JSONObject.parseObject(responseStr,Map.class);

转换List

Object obj = xxx;String responseStr = JSON.toJSONString(obj);List mapList = JSON.parseArray(responseStr , Map.class);List xxxList = JSONObject.parseArray(responseStr, XXXBean.class);

FastJson API

序列化API

package com.alibaba.fastjson;

public abstract class JSON {// 1、toJSONString():将Java对象object序列化为JSON字符串,支持各种各种Java基本类型和JavaBeanpublic static String toJSONString(Object object, SerializerFeature... features);// 2、toJSONBytes():将Java对象object序列化为JSON字符串,按UTF-8编码返回JSON字符串bytespublic static byte[] toJSONBytes(Object object, SerializerFeature... features);// 3、writeJSONString():将Java对象object序列化为JSON字符串,写入到Writer中public static void writeJSONString(Writer writer,                                       Object object,                                       SerializerFeature... features);

// 4、writeJSONString():将Java对象object序列化为JSON字符串,按UTF-8编码写入到OutputStream中public static final int writeJSONString(OutputStream os, //                                            Object object, //                                            SerializerFeature... features);

}

反序列化API

package com.alibaba.fastjson;

public abstract class JSON {// 1、将JSON字符串jsonStr反序列化为JavaBean对象public static T parseObject(String jsonStr,                                    Class clazz,                                    Feature... features);// 2、将JSON字节反序列化为JavaBean对象public static T parseObject(byte[] jsonBytes,  // UTF-8格式的JSON字符串                                    Class clazz,                                    Feature... features);// 3、将JSON字符串反序列化为泛型类型的JavaBean对象public static T parseObject(String text,                                    TypeReference type,                                    Feature... features);// 4、将JSON字符串反序列为JSONObjectpublic static JSONObject parseObject(String text);}

模板

序列化模板

JavaBean —> JSON String

import com.alibaba.fastjson.JSON;

XXXBean xxxBean = ...;String jsonStr = JSON.toJSONString(xxxBean);

JavaBean —> JSON Bytes

import com.alibaba.fastjson.JSON;

XXXBean xxxBean = ...;byte[] jsonBytes = JSON.toJSONBytes(xxxBean);

JavaBean —> JSON Writer

import com.alibaba.fastjson.JSON;

XXXBean xxxBean = ...;Writer writer = ...;JSON.writeJSONString(writer, xxxBean);

JavaBean —> JSON OutputStream

import com.alibaba.fastjson.JSON;

XXXBean xxxBean = ...;OutputStream outputStream = ...;JSON.writeJSONString(outputStream, xxxBean);

反序列化模板

JSON String —> JavaBean

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;

String jsonStr = ...;XXXBean xxxBean = JSON.parseObject(jsonStr, XXXBean.class);

JSON Bytes —> JavaBean

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;

byte[] jsonBytes = ...;XXXBean xxxBean = JSON.parseObject(jsonBytes, XXXBean.class);

JSON Generic Type —> JavaBean

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;String jsonStr = ...;XXXBean xxxBean = JSON.parseObject(jsonStr, new TypeReference() {});Type type = new TypeReference>() {}.getType();List list = JSON.parseObject(jsonStr, type);

JSON String —> JavaBean

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;

String jsonStr = ...;JSONObject jsonObj = JSON.parseObject(jsonStr);

[每篇微语]

做人凡事要静,静静地来,静静地去,静静努力,静静收获,切忌喧哗。

— 亦舒

java json 转map_JAVA | 基于Fastjson的JSON串序列化和反序列化模板总结相关推荐

  1. Java—基于Fastjson的JSON串序列化和反序列化模板总结

    关注微信公众号:CodingTechWork,一起学习进步. 介绍 模板需求说明   开发中经常遇到前端传递过来的JSON串的转换,后端需要解析成对象,有解析成List的,也有解析成Map的.   我 ...

  2. gson json转map_Java几种常用JSON库性能比较

    点击上方"Java研发军团",选择"置顶公众号" 关键时刻,第一时间送达! 阅读本文需要5分钟 作者:飞污熊 xncoding.com/2018/01/09/j ...

  3. Java泛型之mybatis,基于spring MVC 和 MyBatis 泛型的代码生成模板

    原标题:基于spring MVC 和 MyBatis 泛型的代码生成模板 简单说明 这块代码生成工具是我抽空的时候方便自己使用而编写的,并不适合其他框架,这里由于项目原有,我并没有上传泛型部份的代码, ...

  4. FastJson实现复杂对象序列化与反序列化

    一.认识FastJson 1.优势 fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果说明比gson快大约6倍,fastjson采用独创的算法 ...

  5. java json格式字符串转为map_json格式的字符串序列化和反序列化的一些高级用法...

    (1) 仅仅将指定属性对应的值序列化成字符串: var filter = {name: 'Jerry', sex: 'male', age: '10'}; var jsonStr4 = JSON.st ...

  6. java实现序列化接口6_只有实现 Java.io. 接口的类的对象才能被序列化和反序列化。用关键字 修饰的对象变量将不会序列化。_程序设计基础(C#)答案_学小易找答案...

    [填空题]7.分时系统时,时间片选的太小会导致运行时间过慢的现象,因此,时间片的大小一般选择为略( 1 )一次典型的交互所需的时间. [单选题]5-6. 我们如果为每一个作业只建立一个进程,则使作业的 ...

  7. 序列化对象C++对象的JSON序列化与反序列化探索

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 一:背景 作为一名C++开发人员,我始终很期待能够像C#与JAVA那样,可以省力的进行对象的序列化与反序列化,但到现在为止,还没有找 ...

  8. ASP.NET中JSON的序列化和反序列化

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...

  9. ASP.NET MVC Json的序列化和反序列化

    1.利用js进行序列化成字符串和反序列化 1 var personObj = {name:"Tom",age:16}; 2 3 // 利用JS序列化成字符串 4 var perso ...

  10. 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...

最新文章

  1. 为什么数据库连接池不采用IO多路复用?
  2. LPSTR与char*的转换
  3. 嵌入式系统开发者需要掌握什么技术?
  4. 【C++基础学习】C++引用参数与指针参数
  5. 2017河北对口计算机试题,2017河北省对口升学计算机专业理论试题(附答案解析).doc...
  6. HDU 2563 统计问题 (DFS + 打表)
  7. javaweb不同用户登录不同页面的页面_Java Web轻松学36 - 第二个Servlet应用租房网(1)...
  8. 从实际项目出发,告诉你vue3到底香不香
  9. 消费者生产者问题,哲学家问题
  10. buctoj-python 2022.6.19
  11. 组建计算机网络的硬件设备,计算机网络的硬件组成中包含了哪些硬件设备
  12. C语言记录按键次数,【视频】C语言实现键盘记录【c语言吧】_百度贴吧
  13. a-table及相关组件的使用
  14. 取小数点前两位,并四舍五入
  15. Python制作爱心跳动代码,这就是程序员的烂漫吗
  16. ArcGIS用土地利用数据导出shp
  17. 总谐波失真80_如何将总谐波失真(THD)控制着10%以下?
  18. 推荐四款可视化工具,解决99%的可视化大屏需求
  19. 地大计算机学院田甜,【学霸画像】第七十一期—记计算机学院2013级本科生詹才韬...
  20. Word 自带公式转为mathtype格式

热门文章

  1. Atitit.jquery 版本新特性attilax总结
  2. atitit.提升开发效率---动态语言总结
  3. paip.本机CVS环境搭建
  4. 阿里云linux上安装,卸载mysql与重新安装配置Mysql
  5. mut a:T 和a:mut T的区别
  6. 【Rust学习笔记】Rust生命周期参数的详细阐述
  7. 贝莱德COO:作为全球最大资产管理公司,为什么说我们还是成长中的科技公司?
  8. 小银行忍痛放弃资管业务? 转型渠道代销是大势所趋
  9. Rust : codewars的Product of consecutive Fib numbers
  10. Julia: 关于... (三个圆点)