通过Gson lib从json文件中获取对象,出现java.lang.UnsupportedOperationException错误

时间:2015-10-17 10:59:34

标签: java json casting gson

我的代码使用Gson lib将Convert .json文件转换为具有以下代码的Java Model:

public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(
                new FileReader("C:\\developers.json"));
        List<Developer> devList = new Gson().fromJson(br, Collections.<Developer>emptyList().getClass());
        for (Developer d : devList) {
            System.out.println(d.getAge());
        }
    }

发生错误,请参考fromJson

的第二个参数
Exception in thread "main" java.lang.UnsupportedOperationException

此错误适用于投射。搜索后我发现比这段代码更好。 我不知道出了什么问题? 感谢您解决问题的任何指导。

修改 developers.json - &gt;

[
  {
    "name": "mkyong",
    "age": 120,
    "salary": 1555002
  },
  {
    "name": "amir",
    "age": 20,
    "salary": 3000000
  }
]

和Developer.java - &gt;

public class Developer {

    private String name;
    private BigDecimal salary;
    private Integer age;

...
getters and setters
}

1 个答案:

答案 0 :(得分:1)

抛出异常是因为Gson正在创建emptyList()返回的List类型的实例,然后尝试向其添加元素。此方法返回的列表类型为immutable,这会导致UnsupportedOperationException

不应使用emptyList().getClass(),而应使用TypeToken反序列化泛型类型,如Gson user guide中所述。

Type listType = new TypeToken<List<Developer>>() {}.getType();
List<Developer> devList = new Gson().fromJson(br, listType);