将 Java 个对象序列化为 JSON 个并行数组

Serialize Java objects as JSON parallel arrays

在 Java 中,是否有将对象集合序列化为并行数组的单个 JSON 对象的好方法?

例如,给定一个 Person 类型的集合

class Person {
  String firstName;
  String lastName;
  int age;
}

我想制作以下内容 JSON:

{
  "firstName": ["Allison", "Stanley", "Adrian"],
  "lastName": ["Smith", "Williams", "Davis"],
  "age": [23, 17, 42]
}

如果可能,我更愿意使用 jackson,但欢迎所有建议。

你真的不应该那样做。并行数组是一种反模式。

如果你坚持(人们会讨厌你),为它创建一个class并在生成JSON之前转换数据。

class PersonList {
  List<String> firstName;
  List<String> lastName;
  List<Integer> age;

  PersonList(List<Person> persons) {
    for (Person p : persons)
      add(p);
  }

  void add(Person p) {
    firstName.add(p.getFirstName());
    lastName.add(p.getLastName());
    age.add(p.getAge());
  }
}
List<Person> persons = ...

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(..., new PersonList(persons));

我希望找到一个不需要新 PersonList class 的选项。可以利用 Jackson 内置的所有 并识别 Person 的属性来为我生成 JSON 列表。

我没有看到类似的东西,所以从 by Andreas 扩展,我使用 Guava 的 Lists.transform() 创建 属性 列表作为原始视图,没有复制数据。

class PersonList {
  List<String> firstName;
  List<String> lastName;
  List<Integer> age;

  public PersonList(List<Person> people) {
    this.firstName = Lists.transform(people, Person::getFirstName);
    this.lastName = Lists.transform(people, Person::getLastName);
    this.age = Lists.transform(people, Person::getAge);
  }

  // getters...
}