fastjson使用大坑:JSON.parseObject()时报错asm deserialize error
fastjson
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
项目地址:https://gitcode.com/gh_mirrors/fastj/fastjson
免费下载资源
·
需要注意的是fastjson在序列化和反序列化的时候,默认是开启ASM的。(关闭即可解决报错)
使用下面的代码就能关闭ASM:
SerializeConfig.getGlobalInstance().setAsmEnable(false); // 序列化的时候关闭ASM
ParserConfig.getGlobalInstance().setAsmEnable(false); // 反序列化的时候关闭ASM
补充:何为asm?
ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。
ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。
ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。
说白了asm是直接通过字节码来修改class文件。
FastJson对于json格式字符串的解析主要用到了一下三个类:
(1)JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
(2)JSONObject:fastJson提供的json对象。
(3)JSONArray:fastJson提供json数组对象。
JSON
JSON类之toJSON()方法,实现javabean对象转化为json对象
JSON类之toJavaObject()方法,实现json对象转化为javabean对象
JSON类之JSONArray()方法,实现json字符串转化为json对象数组或List
JSON类之parseObject()方法,实现json字符串转换为json对象或javabean对象
JSON类之toJSONString()方法,实现json对象转化为json字符串和javabean对象转化为json 字符串
Java对象转json字符串
String s = JSON.toJSONString(data);//data为对象
Json字符串转java对象
1、json字符串转java简单对象
Data d = JSON.parseObject(s,Data.class)//s为json字符串,Data为java对象
或者
Data d = JSONObject.parseObject(s,Data.class)//s为json字符串,Data为java对象
2、json字符串数组类型与java对象转换
//json字符串--数组型与JSONArray对象之间的转换
public static void jsonStrToJSONArray() {
String str = "{\"errors\":[{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"254\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false},{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"255\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false}]}";
JSONObject jsonObject = JSON.parseObject(str);
JSONArray error = jsonObject.getJSONArray("errors");
List<Error> errors = JSON.parseObject(error.toJSONString(), new TypeReference<List<Error>>() {
});
或者
Error e = JSONObject.parseObject(str,Errors.class)//Error类中封装集合的字段
Json字符串转json对象
JSONObject jsonObject = JSON.parseObject(s);
复杂JSON格式字符串与JSONObject之间的转换
public static void jsonToBean() {
String str ="{\"meta\":{\"code\":\"0\",\"message\":\"同步成功!\"},\"data\":{\"orderno\":\"U_2018062790915774\",\"suborderno\":\"SUB_2018062797348039\",\"type\":\"organunit\",\"result\":{\"organunit\":{\"totalCount\":2,\"successCount\":0,\"failCount\":2,\"errors\":[{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"254\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false},{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"255\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false}]},\"role\":{\"totalCount\":0,\"successCount\":0,\"failCount\":0,\"errors\":[]},\"user\":{\"totalCount\":0,\"successCount\":0,\"failCount\":0,\"errors\":[]}}}}";
JSONObject jsonObject = JSON.parseObject(str);
JSONObject data = jsonObject.getJSONObject("data");
JSONObject result = data.getJSONObject("result");
String organunit1 = result.getString("organunit");
System.out.println(organunit1);
JSONObject organunit = result.getJSONObject("organunit");
JSONArray errors2 = organunit.getJSONArray("errors");
List<Error> error = JSON.parseObject(errors2.toJSONString(), new TypeReference<List<Error>>() {
});
}
GitHub 加速计划 / fastj / fastjson
25.69 K
6.51 K
下载
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
最近提交(Master分支:3 个月前 )
c942c834 - 1 年前
5bc4709b - 1 年前
更多推荐
已为社区贡献2条内容
所有评论(0)