如何使用Gson解析多种类型的payload

How to use Gson to parse multiple types of payloads

我正在使用 GSON 解析器解析具有 JSON 格式的 Http 响应:

{ "type" : "A1", "payload": <Format as per type A1> }
{ "type" : "A2", "payload": <Format as per type A2> }
.
.
.

我无法控制 JSON 输出,因为我只写 http 客户端

我将基数 class 定义为:

class Base {
   String type;
   Object payload;
}

Gson g = new Gson();
Base baseObj = gson.fromJson(response, Base.class);
// Need to cast and access baseObj.payload to specific class

但现在我想将 "Object payload" 强制转换为特定的 class 并访问其成员变量

对于您无法控制的 JSON 响应中的嵌套对象,您必须编写反序列化程序。参见 GSON 具体实现:。

从理论上讲,我真的不推荐这样做,因为它很黑,但您也可以通过执行如下简单的操作来使它正常工作,具体取决于它的一次性代码。

class Baselike {
    String type;
    String payloadStr;
}

class Payload
{
    public int foo; // whatever the format is
    public String bar;
}

Gson g = new Gson();
Baselike baseObj = gson.fromJson(response, Baselike.class);
Payload payloadObj = gson.fromJson(baseObj.payloadStr, Payload.class);

您可以使用 jackson 将您的 json 反序列化为 class。

你可以这样写:

ObjectMapper objectMapper = new ObjectMapper(); SampleClass abc= objectMapper.readValue(jsonData, SampleClass .class);