不同类的两个bean,放到一个Json数组里,变成Json格式的字符串,如何解析
时间: 2024-09-18 15:07:57 浏览: 73
当你将不同类型的Bean对象放入一个JSON数组中,并转换成JSON字符串时,你需要一个通用的方式来解析这个字符串,通常这涉及到序列化和反序列化的过程。这里是一个基本步骤:
1. **序列化**:首先,你需要一个能够处理不同Bean类型的序列化工具,如Jackson、Gson等库。假设你使用的是Jackson,可以创建一个`ObjectMapper`实例。
```java
import com.fasterxml.jackson.databind.ObjectMapper;
// 创建一个ObjectMapper实例
ObjectMapper mapper = new ObjectMapper();
// 将Bean对象添加到List中
List<YourBean> beans = Arrays.asList(
bean1, // 类型A的Bean
bean2, // 类型B的Bean
);
// 序列化List为JSON数组
String jsonArray = mapper.writeValueAsString(beans);
```
2. **JSON字符串**:`writeValueAsString()`方法会将列表转换为一个JSON形式的字符串,例如:
```json
[
{"type": "A", "field1": "value1"},
{"type": "B", "field2": "value2"}
]
```
这里的每个元素都有一个额外的"type"字段,用于区分不同类型。
3. **解析**:当接收JSON字符串并需要反序列化时,你可以创建一个泛型的`List<Object>`先存储所有内容,然后遍历数组,根据"type"字段分别实例化对应的Bean类型:
```java
// 反序列化JSON数组
List<Map<String, Object>> jsonArray = mapper.readValue(jsonArray,新的类型,比如 List<Map<String, Object>>);
List<YourBean> deserializedBeans = new ArrayList<>();
for (Map<String, Object> map : jsonArray) {
String type = (String) map.get("type");
if ("A".equals(type)) {
YourBeanA beanA = new YourBeanA((String) map.get("field1"));
deserializedBeans.add(beanA);
} else if ("B".equals(type)) {
YourBeanB beanB = new YourBeanB((String) map.get("field2"));
deserializedBeans.add(beanB);
}
}
```
阅读全文