@wenshao 你好,想跟你请教个问题:
fastjson解析List<Object[]>类型数据在JDK7环境下报错。errorMessage如下:
Exception in thread "main" com.alibaba.fastjson.JSONException
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:475)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:211)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:171)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:292)
at JTest.main(JTest.java:25)
Caused by: java.lang.NullPointerException
at com.alibaba.fastjson.parser.deserializer.ArrayDeserializer.deserialze(ArrayDeserializer.java:31)
at Fastjson_ASM_Clazz_1.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:471)
... 4 more
测试类就三个。如下:
public class User{ public User() { } public User(int age, String name) { super(); this.age = age; this.name = name; } private int age; private String name; @Override public String toString() { return "User [age=" + age + ", name=" + name + "]"; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
import java.util.List; public class Group { List<User[]> userArrList; public Group(){} public List<User[]> getUserArrList() { return userArrList; } public void setUserArrList(List<User[]> userArrList) { this.userArrList = userArrList; } }
import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSON; public class JTest { /** * @param args */ public static void main(String[] args) { List<User[]> list = new ArrayList<User[]>(); User u1 = new User(1, "111111"); User u2 = new User(2, "222222"); User u3 = new User(3, "33333"); User u4 = new User(4, "4444"); list.add(new User[] { u1, u2 }); list.add(new User[] { u3, u4 }); Group clz = new Group(); clz.setUserArrList(list); String json = JSON.toJSONString(clz); System.out.println(json); Group clz1 = JSON.parseObject(json, Group.class); System.out.println(clz1.getUserArrList().get(1)[1].getName()); } }补充说明:
1、引入fastjson-1.1.26.jar,在JDk1.6环境下没问题,在JDK1.7环境下报上述错误。调试可知,在com.alibaba.fastjson.parser.deserializer.ArrayDeserializer.deserialze这个方法中,传入的参数Type type值为null
2、推测可能是编译问题,但是发现不是,因为:直接导入fastjson源码,不行。修改编译级别到1.6\1.5,都不行。
3、其他相关类型如List<Object>、Object[][]都测试没有parser问题。
4、以上结论经过@JFinal 核实确认,感谢@JFinal。
还请温少及各位大牛帮忙看一下这个问题,谢谢。
通过这个问题,了解到Java6和Java7中List<User[]>的类型信息是不一样的。在Java6中"User[]"是一个GenericArrayType,而在Java7中则是User[].class。
问题已经修复,请使用最新快照:
http://code.alibabatech.com/mvn/snapshots/com/alibaba/fastjson/1.1.28-SNAPSHOT/
@wenshao,又有新的问题了,麻烦给看看,具体请看补充话题。多谢啦。但是在我和另一位同事的1.7上没问题。。。。 我测试的是linuxOraclejava1.7.0_10和1.7.0_11我是winx861.7.0_03和1.7.0_11,可以推测得出03-11版本应该都是一样的,因为没理由中间改过一次又改回来。另外,装了jdk1.7不等于用的就是jdk1.7吧版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。