如何使用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);
我正在使用 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);