解析重用已經實例化對象我使用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對不起,這是一個錯字 –