@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吧