Lal*_*lao 25 java json list jackson
我正在使用杰克逊来阅读json消息.我试图解析的一个值是List,另一个值包含列表中数据的类型.这是我在java中创建的结构.
public class Message<T> {
private Timestamp time;
private RestAction action;
private String type;
private List<T> data;
}
Run Code Online (Sandbox Code Playgroud)
通过Class.forName();我可以得到代表列表中数据的类.问题是如何阅读清单.
spl*_*tch 73
更短的东西:
mapper.readValue(jsonString, new TypeReference<List<EntryType>>() {});
Run Code Online (Sandbox Code Playgroud)
ale*_*lex 45
如果你需要将传入的json映射到List,你可以这样做
String jsonString = ...; //Your incoming json string
ObjectMapper mapper = new ObjectMapper();
Class<?> clz = Class.forName(yourTypeString);
JavaType type = mapper.getTypeFactory().constructCollectionType(List.class, clz);
List <T> result = mapper.readValue(jsonString, type);
Run Code Online (Sandbox Code Playgroud)
编辑
像这样的东西,完全未经测试,从未完成
public Message<T> deserialize(JsonParser jsonParser, DeserializationContext arg1)
throws IOException, JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
JsonNode timeStamp = node.get("time");
Timestamp time = mapper.readValue(timeStamp, Timestamp.class);
JsonNode restAction = node.get("action");
RestAction action = mapper.readValue(restAction, RestAction.class);
String type = node.get("type").getTextValue();
Class<?> clz = Class.forName(type);
JsonNode list = node.get("data");
JavaType listType = mapper.getTypeFactory().constructCollectionType(List.class, clz);
List <T> data = mapper.readValue(list, listType);
Message<T> message = new Message<T>;
message.setTime(time);
message.setAction(action);
message.setType(type);
message.setData(data);
return message;
}
Run Code Online (Sandbox Code Playgroud)
Mal*_*alt 10
自版本 2.11(2020 年 4 月)起,Jackson 有readerForListOf方法(文档):
ObjectMapper mapper = ObjectMapper().configure(...);
ObjectReader reader = mapper.readerForListOf(MyClass.class);
List<MyClass> list = reader.readValue(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47938 次 |
| 最近记录: |