如何用Gson解析变量子节点?

时间:2016-03-01 01:08:59

标签: json gson android

对于令人困惑的标题道歉,无法想出更好的标题。

我的API会返回如下响应:

{
    "type":"a",
    "extras":{
        "a1":"valueA1",
        "a2":"valueA2"
    }
}

如果类型为" b",则响应如下:

{
    "extras":{
        "b1":"valueB1"
    },
    "type":"b"     //note that "type" may come after "extras"
}

对于第三种类型" c",响应可以是:

{
    "type":"c",
    "extras":{
        "b1":"valueB1",
        "a1":"valueA1",
        "a2":"valueA2"
    }
}

以下是我的要求:

  1. 有超过20种这样的"类型" API可以返回。
  2. 每种类型都有一个额外的节点,其中的属性可能与其他typeExtras共享,也可能不与其共享。通常每个额外节点有1-10个属性。
  3. "类型"的顺序和"额外"不固定。但两者都保证在场。
  4. 我正在尝试的天真解决方案是拥有一个"额外的" POJO包含所有可能的属性值: 的 Extras.java

    String a1;
    String a2;
    String b1;
    

    我的客户在消费期间有这样的支票:

    if(type.isA()) {
        a1 = extras.a1;
        a2 = extras.a2;
        //there is no way to prevent developers from calling extras.b1
    }
    

    我的代码充满了超过50个属性,并且散布着20种类型的空检查。有没有更好的办法 ?

    奖金问题:我强烈认为API设计不佳。还有其他想法吗?

0 个答案:

没有答案