FastJson相关内容
为了处理前端传入的json字符串,我使用了阿里的fastjson库处理json字符串。主要有以下几点:
1.加入Maven库
1 | <dependency> |
2.有关类库的一些说明
fastjson中主要有两类,一种是JSONArray,一种是JSONObject,JAONArray相当于List < object >,JSONObject相当于Map < String, Object >。JSONObject可以使用 get(“key”) 方法获取相应的值。fastjson还提供了多种get方法,比如直接获取int类型的getInterger,直接获取String类型的getString方法,还有其他的一些。JSONArray,可以使用get(index),获取某一个位置的对象,也可以使用size()方法获取数组长度,也可以通过getObject(index,Object.class),直接将相应序号上的对象转换为某一个类型。
3.更新和添加值
fastjson更新或者添加一个值,只需要使用对象的 jsonObject.put() 方法即可。
4.序列化与反序列化
(1) 序列化
JSON.toJSONString() 方法
(2) 反序列化
JSON.parse(),fastjson还提供了序列化方法的重载,只需要传入相对于的参数个数即可。也可以使用JSON.parseObject(text) 方法。
(3) 序列话的时候顺序问题
1 | // 方法1、解析时增加参数不调整顺序 |
5.遍历
1 | // 方法一 |
不知道是不是版本的问题,我这里的jsonObject没有keys()函数。
1.JSON学习(四):JsonArray和JsonObject遍历方法
2.JSONObject遍历获取键值 (这个方法不行)
3.JSON学习(四):JsonArray和JsonObject遍历方法
4.fastJson顺序遍历JSON字段
5.fastjson JSONObject遍历
6.序列化时首字母被转换成了小写
在使用fastjson进行序列化的时候,调用了JSONObject.toJSONString()方法,出现了原本本该是大写字母的键,最后变成了小写。
1 | JSONObject json=new JSONObject(); |
调用toJSONString方法的对象本身就是一个JSONObject对象。
解决方法就是在序列化之前,调用compatibleWithFieldName和compatibleWithJavaBean,然后在序列化,这样首字母就不会被小写了。FastJson在进行操作时,是根据getter和setter的方法进行的,并不是依据Field进行。
1 | TypeUtils.compatibleWithFieldName = true; |
经过测试,这样有个缺点,就是原本就是小写的,被转换成了大写,对应于参考文章3中的,使用lombok的情况。所以查询资料,很多都是设置@JSONField注解,但是这是针对一个类中的字段,但是我这个对象,本身就是JSONObject,根本就没有地方写这个注解啊。
最后我还是屈服于@JSONFiled注解了
还有就是,如果配置文件中配置了下面的内容,那么@ResquestBody返回的内容,全部的首字母都会变成大写了。
1 | spring: |
1.FastJSON 设置默认参数,全局配置方式 和 一些使用方式、坑
2.FastJSON 设置默认参数,全局配置方式 和 一些使用方式
3.fastjson转换json时,碰到的那些首字母大小写转换的坑! (这篇文章很实用,TypeUtils.compatibleWithFieldName和TypeUtils.compatibleWithJavaBean)
4.JSONObject.toJSONString把属性的大小写改变了 (提到了@JSONField注解)
5.JSONObject.toJSONString首字母大小写问题的三种解决方案 (这里有三种解决方案,最后一种,使用的是Gson代替)
7.序列化时设置将null转为””
在使用toJSONString()方法时,如果属性值为null,那么fastjson默认是忽略这个值的,可以通过设置序列化时的属性信息,自定义将null序列化为空值。
1 | JSONObject.toJSONString(resultMap, SerializerFeature.WriteMapNullValue); |
1.定制序列化 (这是官方的定制化输出过程)
2.fastjson序列化将Null设置为空字符串””等问题
3.FastJSON 设置默认参数,全局配置方式 和 一些使用方式、坑 (这篇文章解决了问题)
8.有序排列
默认存储和解析时,fastjson都是无序的,但是排除不了需要有序的情况。
1 | // 序列化时有序 |
1.fastjson存在乱序的问题 (这篇文章还是比较有用的)
2.fastjson JSONObject 使属性有序 (这篇文章简单了点)
3.fastjson JSONObject 怎么设置成有序 (这篇文章有些过时了,但是使用SerializeConfig.getGlobalInstance(), SerializerFeature.QuoteFieldNames)还是有用的
4.jsonobject顺序不对怎么办?jsonobject有序排列方法 这里使用了 JSONObject jsob = new JSONObject(new LinkedHashMap()); 我尝试了不起作用。
5.JSONObject按put顺序排放与输出 和上面的方案差不多
6.fastjson key 排序方式 这里使用的是TreeMap
9.fastjson2的问题
使用fastjson2,这里和fastjson1.0还是有点不同的。