Java 重用Gson解析的已实例化对象
我正在使用gson库解析具有以下结构的json对象:Java 重用Gson解析的已实例化对象,java,android,json,gson,Java,Android,Json,Gson,我正在使用gson库解析具有以下结构的json对象: { "data" : [ { "id" : 1, "type" : "student", "name" : "Student 1", "subjects" : [ { "id": 1, "type" : "subj
{
"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个或多个班级。正如您所看到的,两个或更多的学生可以对特定的主题有相同的引用,但是当我解析对象时,学生1将有一个主题1的对象,学生2将有一个不同的对象,但与学生1的对象具有相同的信息,所以我的问题基本上是,有没有方法重用已经创建的对象?在这种情况下,有多个引用不是问题,但如果有更多的对象,这将变成内存问题
理论上,我想到的是,在创建对象实例之前,应该有某种类型的池,因此我使用id和类型查找,如果找到对象,我将返回它,否则我将让解析器为我创建实例。有JsonDeserializer接口,但是使用JSON反序列化上下文有一个已知的问题,而且我不能只在其中执行一个新的Gson(),因为我的主Gson有一些反序列化程序和策略,我想重用它们。我可以重新创建gson,但我认为这并不理想,应该有更好的方法
另外,我已经有了一个TypeAdapter,它最初对来自服务器的JSON进行预处理,基本上它删除了一些属性并添加了一些其他属性,从而生成了这个示例,但是我无法像JsonDeserializer那样检查每个单独的对象
我将非常感谢您在这方面的任何帮助或想法。您可以做的一个方法是将结构展平。i、 e.您可以跳过在学生对象中发送整个主题对象
例如,学生对象:
"student": [
{
id: "1234567890",
name: "Bhalchandra Wadekar",
subject: [
"CS4040",
"CS4010"
]
}
]
"subject": [
{
id: "CS4040",
name: "Mobile Design and Development"
},
{
id: "CS4010",
name: "Major Project"
}
]
其中,CS4040和CS4010是个体受试者的标识符
主题对象:
"student": [
{
id: "1234567890",
name: "Bhalchandra Wadekar",
subject: [
"CS4040",
"CS4010"
]
}
]
"subject": [
{
id: "CS4040",
name: "Mobile Design and Development"
},
{
id: "CS4010",
name: "Major Project"
}
]
使用此方法的好处是:
您的科目在不同的课程中共享相同的ID。您的示例数据中是否有输入错误?+
office
也是一个输入错误吗?@LyubomyrShaydariv抱歉,是的,这是一个输入错误这实际上是服务器返回的内容,但基本上我需要在需要时添加一个函数来搜索每种类型,这将增加代码的复杂性,每次我传递一组引用时,我都需要添加代码来查找真正的对象。地图可以解决为给定标识符查找主题的问题。:)