开发者社区> 问答> 正文

fastjson解析List<Object[]>类型数据在JDK7环境下报错?报错

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

还请温少及各位大牛帮忙看一下这个问题,谢谢。

展开
收起
爱吃鱼的程序员 2020-06-22 21:54:56 708 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    通过这个问题,了解到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吧
    2020-06-22 21:55:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像