Java 序列化按属性设置关键帧的对象列表
假设我有一门课:Java 序列化按属性设置关键帧的对象列表,java,json,serialization,jackson,gson,Java,Json,Serialization,Jackson,Gson,假设我有一门课: public class Person { String name; Int age; } 以及此类对象的列表: List<Person> people = ... 但我希望序列化为单个json对象,其中每个属性都是包含属性的列表,如下所示: "{'name':['John','Sam'],'age':[42,43]}" 任何序列化库都支持这一点吗?我会创建一种“包装器”,它可以容纳任意数量的人员,并以某种方式存储字段,以便以这种方式对其进行序列化
public class Person {
String name;
Int age;
}
以及此类对象的列表:
List<Person> people = ...
但我希望序列化为单个json对象,其中每个属性都是包含属性的列表,如下所示:
"{'name':['John','Sam'],'age':[42,43]}"
任何序列化库都支持这一点吗?我会创建一种“包装器”,它可以容纳任意数量的人员,并以某种方式存储字段,以便以这种方式对其进行序列化。因此,在本例中,您将创建一系列人员,创建一个包含这些人员的包装器,然后将其序列化
public class PersonWrapper {
private int[] ages;
private String[] names;
public PersonWrapper(Person... persons) {
ages = new int[persons.length];
names = new String[persons.length];
for (int i = 0; i < persons.length; i++) {
ages[i] = persons[i].getAge();
names[i] = persons[i].getName();
}
}
}
公共类PersonWrapper{
私人年龄;
私有字符串[]名称;
公众人物包装(人…人){
年龄=新整数[人长];
名称=新字符串[persons.length];
for(int i=0;i
将您的列表
转换为新对象
class NewClass {
List<String> name;
List<Integer> ages;
}
class新类{
名单名称;
列出年龄;
}
然后通过序列化程序传递此对象以获取:
“{'name':['John','Sam'],'age':[42,43]}”
序列化库通常不是为类似的东西而设计的。
您需要的是JSON树转换,您可以轻松地在Gson和Jackson中实现它
以下是Gson的一个转换示例:
最终类转换{
私有转换(){
}
静态JsonObject transposeShallow(最终Iterable
class NewClass {
List<String> name;
List<Integer> ages;
}
[{"name":"John","age":42},{"name":"Sam","age":43}]
{"name":["John","Sam"],"age":[42,43]}