解析重用已经实例化对象我使用GSON库来解析具有以下结构的JSON对象:通过GSON
{
"data" : [
{
"id" : 1,
"type" : "student",
"name" : "Student 1",
"subjects" : [
{
"id": 1,
"type" : "subject"
}
]
},
{
"id" : 2,
"type" : "student",
"name" : "Student 2",
"subjects" : [
{
"id": 1,
"type" : "subject",
"name" : "Math"
}
]
},
{
"id" : 3,
"type" : "office",
"name" : "student 3",
"subjects" : [
{
"id": 1,
"type" : "subject",
"name" : "History"
},
{
"id": 2,
"type" : "subject",
"name" : "History"
}
]
}
]
}
这是一个非常简单的例子,有3名学生谁协助为0或很多班。正如你所看到的,2个或更多的学生可以有一个特定的主题相同的引用,但是当我解析对象时,学生1将有一个主题1的对象,学生2将有一个不同的对象,但具有相同的信息学生1,所以我的问题基本上是,有没有办法重用已经创建的对象?在这种情况下,有多个引用不是问题,但是说你有更多的对象,这将变成一个内存问题。
理论上想到的是,在创建一个对象实例之前,应该有某种类型的池,所以我使用id和type,如果找到了我返回的对象,否则我让解析器去为我创建实例。有JsonDeserializer接口,但是使用JSON反序列化上下文存在一个已知问题,我也不能只在它内部做一个新的Gson(),因为我的主Gson有一些我想要重用的反序列化器和策略。我可以重新创建gson,但我不认为这是理想的,应该有更好的方法。另外,我已经有了一个TypeAdapter,它最初对来自服务器的JSON进行了预处理,基本上它删除了一些属性并在示例中添加了一些其他属性,但是我无法检查每个单独的对象,如JsonDeserializer会做
我会很感激任何帮助或想法。
您的主题共享不同类别的相同ID。您的示例数据中是否存在拼写错误? +办公室也是一个错字吗? –
@LyubomyrShaydariv对不起,这是一个错字 –