fastjson使用

FastJson 之 JSONPath的使用

泄露秘密 提交于 2020-01-13 18:46:32
转载自: https://springboot.io/t/topic/309 叙述 jsonpath,类似于xpath。都是通过一种字符串表达式,来快捷检索json里面的数据。在非常复杂的json结构中,对于一些获取和判断操作,不需要层层的去get。可以通过简洁的JsonPath表达式获取到结果。 解析 JSONPath 构造方法 public JSONPath(String path) public JSONPath(String path, SerializeConfig serializeConfig, ParserConfig parserConfig) 静态属性/方法 public static Object eval(Object rootObject, String path) public static Object extract(String json, String path, ParserConfig config, int features, Feature... optionFeatures) public static Object extract(String json, String path) * 根据path检索值 * extract,按需计算, 性能会更好 public static int size(Object rootObject,

JavaWeb中使用JSON

强颜欢笑 提交于 2020-01-05 06:27:12
前言: 最近也是期末了,有好多好多文档和实验报告要交,所以都没啥时间写文,这段时间清闲了,来补一下之前学习时遗漏的一些知识树,话说就没人吐槽这个JSON图标好丑吗? 什么是JSON JSON 指的是 JavaScript 对象表示法( J ava S cript O bject N otation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具有自我描述性,更易理解 JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 这里有意思的是,JSON本来是用来表示 JavaScript 对象的一种数据文本格式,但由于它轻量级、易于解析/操作(JavaScript原生支持)的一些特点,渐渐的被很多语言支持也就成了一种标准 为什么使用JSON 在JSON之前,我们通常在网络传输中使用的格式是XML,在我们的印象之中,XML具有很好的可读性,并且格式统一,解析起来也相对比较简单,为什么摒弃掉XML而逐渐的使用起JSON呢? 主要原因在于: JSON比XML更小、更快、更易解析。 JavaScript原生支持JSON,解析速度相较XML会更快; XML解析成DOM对象的时候,浏览器之间会产生差异【例如IE和FireFox】;

使用Fastjson解析List对象时出现:{"$ref":"$.data[0].task.OBJECTS[0]"}的问题原因及解决方法

走远了吗. 提交于 2019-12-26 01:14:31
首先,说一下出现问题的原因:后台传过去的json数据用了阿里巴巴的fastjson转换,但是有个问题就是:解析list中引用的数据时,jvm避免数据溢出,会自动处理为“循环引用”,因此,也就出现了问题的根源{"$ref":"$.data[0].task.OBJECTS[0]"},数据以引用的方式传给前台,前台却无法解析到那段引用的数据。 循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。 然后,知道了问题的根源,就知道往什么方向解决问题了--禁止循环引用。 解决方案如下所示 : 注:map中存放了你需要传到前台的数据对象:data!并且data中的对象数据存在循环引用。 网上的解决方案: JSON.toJSONString(list,SerializerFeature.DisableCircularReferenceDetect) 注:不管你是引用JSON,还是JSONObject,主要是看你想传的对象是啥类型,然后转换成JSON / JSONObject 下面介绍一些引用的描述: "$ref":".." 上一级 "$ref":"@" 当前对象,也就是自引用 "$ref":"$" 根对象 "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0)

FastJSON 简单使用

徘徊边缘 提交于 2019-12-24 10:50:09
FastJSON是一个Java语言编写的高性能,功能完善, 完全支持 http://json.org 的标准 的JSON库。多了不说了, 百度一下 一大把。 在此,简单的总结一下自己用过,测试过的方法。 如果使用Maven,在pom.xml文件加入以下依赖。 1 <dependency> 2 <groupId>com.alibaba</groupId> 3 <artifactId>fastjson</artifactId> 4 <version>1.1.23</version> 5 </dependency> 序列化 序列化就是指 把JavaBean对象转成JSON格式的字符串。 com.alibaba.fastjson.JSON提供了许多方法(多态)实现序列化。 1.基本的序列化 String objJson = JSON.toJSONString(Object object); 传入一个对象,将对象转成JSON字符串。 例1 :将Map转成JSON 1 Map<String, Object> map = new HashMap<String, Object>(); 2 map.put("key1", "One"); 3 map.put("key2", "Two"); 4 5 String mapJson = JSON.toJSONString(map); 输出结果: {

springboot使用fastjson解析

六眼飞鱼酱① 提交于 2019-12-24 10:33:23
“明年此日青云去,却笑人间举子忙” 序 刚巧在学习springboot,于是记录起这个知识点,或许以后用得到,也或许可以帮助其他学习者。 使用步骤 在pom.xml文件中加入fastjson的依赖 < dependency > < groupId > com . alibaba < / groupId > < artifactId > fastjson < / artifactId > < version > 1.2 .47 < / version > < / dependency > 启动文件继承WebMvcConfigurationSupport类 @SpringBootApplication public class DemoApplication extends WebMvcConfigurationSupport { } 重写configureMessageConverters方法 /** *@author aRunner *@date 2019/12/21 *@description 重写configureMessageConverters */ @Override protected void configureMessageConverters ( List < HttpMessageConverter < ? >> converters ) { super .

fastjson的@JSONField注解的一点问题

那年仲夏 提交于 2019-12-24 06:58:40
@JSONField 看源码它可以作用于字段和方法上。 引用网上说的,   一、作用Field @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。 但是我在使用中,发现并不如上所说。 例如 @JSONField(name="project_id") private Long ProjectID 发现bean 转json的时候并是"project_id":xxx的形式,json转bean的时候也不会把"project_id":xx的内容设置到ProjectID的里面。 fastjson的版本是1.1.15   二、作用在setter和getter方法上 这种方式倒是在使用的过程当中符合期望。 /**bean 转json 时会把bean中的ProjectID转换为project_id */ @JSONField(name="project_id") public Long getProjectID() { return ProjectID; } /**json 转bean 时会把json中的project_id值赋值给projectID*/ @JSONField(name="project_id") public void setProjectID(Long projectID) { ProjectID = projectID; }

一次fastjson解析问题导致的springmvc接收List格式参数问题

瘦欲@ 提交于 2019-12-23 23:47:57
springmvc的接口如果需要接受json的数据,那么需要定义@RequestBody来解析json数据,springmvc中会将接受的json数据进行解析,然后并封装到对应的实体类中,springmvc并且自持自定义解析json数据的转换器,如果使用Fastjson来转换json请求,那么在封装个参数的时候,需要注意参数的接收格式 接收参数格式问题: 如果请求的参数是一个对象包含List集合的类型: { "list" : [ { "name" : "LVSHCFDC0CE080012" , "age" : "沪A123456" , "gender" : "维修保养" } , ... ] } 并且接收的参数封装为: //这个是接口 public Response index ( @RequestBody ReqListVo < UserVo > vo ) { } // 这个是RequListVo对象 @Data public class ReqListVo < T > { public List < T > list ; } // List中包含的对象 public class UserVo { private String name ; private String age ; private String gender ; } 这样封装一般是没有问题,定义一个对象,并设置泛型

Fastjson 反序列化漏洞利用总结

微笑、不失礼 提交于 2019-12-20 10:27:31
本篇文章对Fastjson漏洞利用的过程做个简单的记录。 背景: Fastjson是Alibaba开发的,java语言编写的高性能JSON库,采用“假定有序快速匹配”的算法,号称Java语言中最快的JSON库。 其项目地址为 https://github.com/alibaba/fastjson ,其提供两个主要接口toJsonString和parseObject来分别实现序列化和反序列化。示例代码: //序列化 User user = new User ( "guest" ,2 ) ; String jsonString = JSON.toJSONString ( user ) //反序列化 String jsonString = "{\\" name\\ ":\\" guest\\ ",\\" age\\ ":12}" User user = ( User ) JSON.parse ( jsonString ) 其最近几年爆出的漏洞影响都比较大,下面会进行简单的说明。 20170315第一次爆出的漏洞 2017年3月15日,Alibaba官方发布了一条安全更新: https://github.com/alibaba/fastjson/wiki/security_update_20170315 。宣布fastjson<=1.2.24存在远程代码执行高危安全漏洞。 利用原理:

FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换

爷,独闯天下 提交于 2019-12-19 05:35:07
fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。 JSONObject:fastJson提供的json对象。 JSONArray:fastJson提供json数组对象。 我们可以把JSONObject当成一个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的方法,方便我们对于对象属性的操作。我们看一下源码。 同样我们可以把JSONArray当做一个List<Object>,可以把JSONArray看成JSONObject对象的一个集合。 此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使用JSON。 首先定义三个json格式的字符串,作为我们的数据源。 //json字符串-简单对象型 private static final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}"; //json字符串-数组类型 private static final String JSON_ARRAY_STR = "[{\

fastJson

梦想的初衷 提交于 2019-12-19 01:54:53
fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。 JSONObject:fastJson提供的json对象。 JSONArray:fastJson提供json数组对象。 我们可以把JSONObject当成一个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的方法,方便我们对于对象属性的操作。我们看一下源码。 同样我们可以把JSONArray当做一个List<Object>,可以把JSONArray看成JSONObject对象的一个集合。 此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使用JSON。 首先定义三个json格式的字符串,作为我们的数据源。 //json字符串-简单对象型 private static final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}"; //json字符串-数组类型 private static final String JSON_ARRAY_STR = "[{\