将 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...
}
在 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 列表。
我没有看到类似的东西,所以从 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...
}