gpt4 book ai didi

java - 重用 Gson 解析的已经实例化的对象

转载 作者:行者123 更新时间:2023-11-29 02:40:40 25 4
gpt4 key购买 nike

我正在使用 gson 库来解析具有以下结构的 json 对象:

{
"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 个或多个类(class)。如您所见,2 个或更多学生可以对特定主题具有相同的引用,但是当我解析该对象时,学生 1 将有一个主题 1 的对象,学生 2 将有一个不同的对象,但与用于的对象具有相同的信息学生 1,所以我的问题基本上是,有没有办法重用已经创建的对象?在这种情况下,拥有多个引用不是问题,但是假设您有更多的对象,这将变成内存问题。

理论上想到的是在创建对象实例之前,应该有某种池,所以我使用id和类型查找,如果找到对象我返回它,否则我让解析器创建我的例子。有 JsonDeserializer 接口(interface),但是使用 JSON 反序列化上下文存在一个已知问题,我也不能只在其中执行一个新的 Gson(),因为我的主 Gson 有一些我想重用的反序列化器和策略。我可以重新创建 gson,但我认为这并不理想,应该有更好的方法。

此外,我已经有一个 TypeAdapter,它最初对来自服务器的 JSON 进行预处理,基本上它删除了一些属性并添加了一些其他属性,从而产生了示例,但我无法让它像 JsonDeserializer 那样检查每个单独的对象做

我将不胜感激任何对此的帮助或想法。

最佳答案

您可以做的一种方法是扁平化结构。即您可以跳过在学生对象中发送整个主题对象。

例如学生对象:

"student": [
{
id: "1234567890",
name: "Bhalchandra Wadekar",
subject: [
"CS4040",
"CS4010"
]
}
]

其中,CS40​​40 和 CS4010 是个体受试者的标识符。

主题客体:

"subject": [
{
id: "CS4040",
name: "Mobile Design and Development"
},
{
id: "CS4010",
name: "Major Project"
}
]

使用这种方法的好处是:

  1. 减少您根据个人请求接收的数据量,从而更快的响应时间。
  2. 每个科目在内存中有一个对象。因此,无论有多少学生协助该科目,您都将创建和使用一个对象。

关于java - 重用 Gson 解析的已经实例化的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44380404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com