我如何使两个不同的数组列表引用同一对象时解析Json文件



我试图解析一个json数据文件,有一个单一的对象在两个不同的数组列表:

{
"TA": [
{
"firstname": "John",
"lastname": "Smith"
},
{
"firstname": "Jane",
"lastname": "Doe"
}
],
"Student": [
{
"firstname": "John",
"lastname": "Smith"
},
{
"firstname": "Kevin",
"lastname": "White"
}
]
}

我当前的解析方法只是为每个Person对象创建一个新的Person对象,并将它们添加到每个List对象中,但是我希望Person对象John Smith仅是由两个"TA"引用的单个对象。list "Student"列表。我该怎么做呢?

如果您试图降低内存使用,您可以使用静态工厂方法来调用实例。假设你使用Jackson:

class Person {
private static Map<Person, Person> cache = new HashMap<>();
@JsonCreator
public static Person create(
@JsonProperty("firstname") String firstname,
@JsonProperty("lastname") String lastname) {
Person person = new Person(firstname, lastname);
return cache.computeIfAbsent(person, Function.identity());
}
final String firstname;
final String lastname;
private Person(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
@Override
public boolean equals(Object o) {
return o instanceof Person
&& Objects.equals(((Person)o).firstname, this.firstname)
&& Objects.equals(((Person)o).lastname, this.lastname);
}
@Override
public int hashCode() {
return Objects.hash(this.firstname, this.lastname);
}
}

TA和Student list是两个不同的list。如果您定义每个列表并用相同的对象(人)填充它们,它们将指向相同的对象。这就是面向对象的方法。

解析Json并期望在两个数组中具有相同的person对象是不可能的(假设person对象将由解析器创建)。解析器将单独处理每个数组,因此您的person对象将不相同。 有一种方法可以做到这一点,那就是在静态类中定义person对象。这样,您将始终获得person对象的相同实例。

在您的情况下,您将不得不为每个变体(姓氏)创建一个静态的人对象

相关内容

最新更新