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

Json 如何使用Gson解析变量子节点?,json,gson,android,Json,Gson,Android,为这个令人困惑的标题道歉,我想不出更好的标题了 My API返回如下响应: { "type":"a", "extras":{ "a1":"valueA1", "a2":"valueA2" } } 如果类型为“b”,则响应如下: { "extras":{ "b1":"valueB1" }, "type":"b" //note that "type" may come after "extras

为这个令人困惑的标题道歉,我想不出更好的标题了

My 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"
    }
}
以下是我的要求:

  • API可以返回20多种这样的“类型”
  • 每个类型都有一个额外的节点,其属性可能与其他TypeExtra共享,也可能不与其他TypeExtra共享。每个额外节点中通常有1-10个属性
  • “类型”和“附加”的顺序不是固定的。但两人都保证在场
  • 我尝试的简单解决方案是使用一个带有所有可能属性值的“extras”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设计得很糟糕。还有其他想法吗?

    1<代码>附加。b1将在类型
    b
    c
    中找到,对吗?2.每种响应类型(a、b、c)都有一组特定的附加值,我指的是一组固定的值。我只是随便举了个例子。extras.b1可以是a、b、c或全部(取决于API想要返回的内容)。2.把临时演员想象成一张地图;它可以有任意数量的钥匙。我有一个所有可能的钥匙的列表,但我不知道当前的额外钥匙中有哪些钥匙。