我面临着与解析 json 相关的问题,其中包含子类的混合数组,我需要将其作为 java 列表提供给客户端。
示例 JSON:
{
"status": "OK",
"results": [
{
"type": "one",
"Id": "2170676",
"count": "456",
"title": "title",
"description": "description",
"oneMemberOne": "11",
"oneMemberTwo": "12",
}
{
"type": "two",
"Id": "2170677",
"count": "123",
"title": "title",
"description": "description",
"twoMemberOne": "21",
"twoMemberTwo": "22",
}
]
}
我由此创建了一个父类和两个子类:
Num:类型、ID、计数、标题、描述字段
1 扩展 Num:一个成员一,一个成员二
两次扩展数量: 两个成员一,两个成员二
现在我的问题是:
我有一个询问结果的方法。说出来List<Num> getResults()
-
我像这样正确解析数据:
List<Num> result = new ArrayList<Num>();
JsonParser parser = new JsonParser();
JsonObject jsonObject = parser.parse(lastResponsePayload).getAsJsonObject()
JsonArray results = jsonObject.get("results").getAsJsonArray();
for (JsonElement element : results) {
JsonObject trs = element.getAsJsonObject();
String type = trs.get("type").getAsString();
if (type.equals("one") {
One one = new Gson().fromJson(element, One.class);
result.add(product);
} else if (type.equals("two") {
Two two = new Gson().fromJson(element, Two.class);
result.add(metaproduct);
}
return result;
-
现在,在客户端,在获得列表后,我必须执行以下操作:
List<Num> results = getResults();
List<One> oness = new ArrayList<One>();
List<Two> twoss = new ArrayList<Two>();
for(Num n : results) {
if(n.type.equals("one")
oness.add((One) n);
else
twoss.add((Two) n);
对于这种场景来说,这是一个好的设计吗?
该API的用户每次都必须根据父类的类型字段进行向下转换。因为 webservice 为我提供了混合的子类数组,所以我必须这样做。有没有更好的方法来解决这个问题?
- 我想到的另一种方法是创建一个
Result
包含两个成员的类One
and Two
并提供我的List<Result>
代替List<Num>
,
但随后用户必须检查成员是否是null
或不,然后采取适当的措施。
先感谢您。