java 对象的属性转换json数据库查询出来一个人员list ,人员对象有一个配偶的json类型字符串。如果以添加注解的形式吧查询出来的list里面的家庭成员都转换为对象(配偶对象有姓名,年龄俩个属性)
时间: 2024-12-25 19:36:08 浏览: 2
在 Java 中,如果你想将从 JSON 数据库查询出的人员列表(每个对象包含一个配偶的 JSON 字符串)转换成更易于操作的对象模型,通常会使用 Jackson 或 Gson 等 JSON 库。可以使用注解如 `@JsonDeserialize` 和 `@JsonProperty` 来帮助解析。
首先,你需要定义一个表示人员的 POJO (Plain Old Java Object) 类,比如 `Person`:
```java
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonDeserialize;
public class Person {
private String id;
@JsonProperty("spouse")
@JsonDeserialize(using = SpouseDeserializer.class)
private Spouse spouse;
// getters and setters
}
class Spouse {
private String name;
private int age;
// getters and setters
}
```
这里,`Spouse` 类需要一个定制的反序列化器 `SpouseDeserializer`,用于将 JSON 格式转换为具体的对象:
```java
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public class SpouseDeserializer extends JsonDeserializer<Spouse> {
@Override
public Spouse deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String jsonStr = p.getText();
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(jsonStr, new TypeReference<Spouse>() {});
}
}
```
然后,在查询数据库并获取到 JSON 列表后,你可以遍历这个列表,对每个 `Person` 对象调用 `deserializeSpouse` 方法来转换 `spouse` 属性:
```java
List<Person> personsFromDb = ... // 查询数据库的结果
for (Person person : personsFromDb) {
person.setSpouse(deserializeSpouse(person.getSpouse()));
}
```
这样,你就把 JSON 子对象转换成了独立的对象实例,并可以直接访问它们的 `name` 和 `age` 属性了。
阅读全文