【发布时间】:2013-12-05 04:36:38
【问题描述】:
好的,所以我编辑了这个问题,因为它不够清楚。
编辑 2:更新 JSON 文件。
我在 Android 应用程序中使用 GSON,我需要解析来自服务器的 JSON 文件,而且有点过于复杂。我不想让我的对象结构太重,所以我想简化内容:所以我的对象结构不会是 JSON 文件的结构。
例如,如果在 JSON 中我有这个:
{
"object1":{
"attribute1" : "test1",
"attribute40" : "test40",
"user":{
"id":1,
"name":"foo"
}
,"example":{
"total":10,
"list":[
{
"tag":"tag1",
"name":"object name 1",
"pos":1
},
{
"tag":"tag10",
"name":"object name 10",
"pos":10
}
]
}
}
"object2":{
"attribute1":"test..."
}
}
我不想在我当前的对象结构中保留一个对象Example,其中包含一个ArrayList 和一个int“总计”。但我只想保留一个简单的字符串,其值为"object name 1;object name 2;..."。
此外,我只想存储用户 ID,而不是完整的用户,因为我已经通过其他服务器 API 调用将完整的用户存储在其他地方。
所以我的班级应该是这样的:
class Foo{
int userId;
String example; //"object name 1;object name 2;..."
...
}
所以我想我们可以使用自定义反序列化器来实现这一点,但我不知道如何。如果可能的话,我想尽量减少内存,所以我不认为有一个完整的对象示例,然后用它来构建我的String example 是正确的方法。
在最坏的情况下,如果它太复杂,我希望能够在解析示例对象时至少只存储标记项的列表:所以我需要一个自定义反序列化器来摆脱 int @987654328 @。
所以我会:
class Foo{
int userId;
ArrayList<Tag> example;
...
}
【问题讨论】:
-
根据您的特殊要求,GSON是矫枉过正。只需将 JSON 字符串传递到域模型的构造函数中,然后使用纯字符串操作拆分/提取所需字段。
-
嗯,当然可以,但是我有很多JSON文件,每次都有超过30个字段,将来结构可能会演变。所以,我肯定更喜欢使用像 GSON 这样的库来最大限度地减少工作和维护。特别是如果我已经在某些 JSON 文件上使用它。
-
“结构可能在未来发展”,从面向对象的角度来看,强烈建议现在对完整的域对象进行建模,即使您不使用它的所有属性。