我有JSONArray,其中数组中的每个元素都是具有5个字段的json。
我想将此JSONArray映射到Class对象的列表。每个Class对象具有与json元素完全相同的字段,另外还有3个其他的Class字段,当从json元素映射对象时,我希望将其设置为null。
我尝试过:
JSONObject jsn = SomeJsonWith2Keys
JSONArray jsn_a = (JSONArray) jsn.get("response");
List<MyClass> tags = (List<MyClass>) objectMapper.readValue(jsn_a.toString(), MyClass.class)
但是这引发了异常
无法从START_ARRAY令牌中反序列化x.x.x.x.MyClass
的实例
数组很大,如果可能的话,我试图不做循环映射。
对于将三个附加字段设置为null时如何映射到类的建议,我将不胜感激
谢谢
答案 0 :(得分:0)
您需要将类型指定为List而不是MyClass。您不能只说List.class来做到这一点,但是Jackson提供了com.fasterxml.jackson.core.type.TypeReference类,该类使您可以提供想要的特定类型列表的事实。
因此,假设您的对象映射器是杰克逊,则可以执行以下操作。
List<MyClass> tags = mapper.readValue(jsn_a.toString(), new TypeReference<List<MyClass>>() {});
如果可以使用数组而不是列表,则可以指定数组类型。
MyClass[] tags = mapper.readValue(jsn_a.toString(), MyClass[].class);