如何使用Gson解析多种类型的有效负载

时间:2016-08-06 14:02:27

标签: java json gson httpclient

我正在使用GSON解析器以JSON格式解析Http Response:

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

由于我只编写http客户端

,因此我无法控制JSON输出

我已将基类定义为:

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

但是现在我要投射&#34;对象有效载荷&#34;到特定的类并访问其成员变量

2 个答案:

答案 0 :(得分:0)

对于您无法控制的JSON响应中的嵌套对象,您必须编写反序列化程序。请参阅GSON特定实现:https://stackoverflow.com/a/23071080/6471273

从理论上讲,我并不是真的推荐这个,因为它是hackish,但是你也可以通过做一些像下面这样简单的东西来使它成为可靠的代码。

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);

答案 1 :(得分:0)

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

你可以这样写:

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