gpt4 book ai didi

java - GSON 反序列化/序列化层次结构类

转载 作者:行者123 更新时间:2023-11-30 06:38:00 26 4
gpt4 key购买 nike

我有一个 java 应用程序,可以将 json 内容发送到我的服务器(c++)。我的服务器接收 json,进行解析、验证等,然后也用 json 发回响应。我的 java 应用程序中有一个请求,该请求具有以下 json 正文(示例):

{
"a": "a",
"b": "b",
"searchMethod": {
"searchByUser": {
"userId": "userId"
}
}
}

但是对于同一个命令,我可以有其他searchMethod:

{
"a": "a",
"b": "b",
"searchMethod": {
"searchByEmail": {
"email": "user@user.com"
}
}
}

因此,当用户执行请求时,我们可以将这两个不同的 json 正文之一发送到我的服务器。我永远不知道我们发送了什么searchMethod。这部分(检查用户发送的 searchMethod 等),当我收到 json 时,我在我的 C++ 服务器中执行此操作。因此,在我的 java 应用程序中,我只需要使用 gson 发送带有其内容的 searchMethod 对象。

这是我的类(class)要做的请求:

public class RequestExample implements SerializableJSON
{
public String a;
public String b;

public RequestExample(String a, b)
{
this.a = a;
this.b = b;
}

public static RequestExample fromStringJson(String data)
{
try
{
Gson gson = new Gson();
return gson.fromJson(data, RequestExample.class);
}
catch(Exception e)
{
return null;
}
}

public static RequestExample fromBytesJson(byte[] data)
{
if (data == null) return null;
try
{
String str = new String(data, "utf-8");
return fromStringJson(str);
}
catch (Exception e)
{
return null;
}
}

@Override
public String toJsonString()
{
try
{
Gson gson = new Gson();
return gson.toJson(this);
}
catch(Exception e)
{
return null;
}
}

@Override
public byte[] toJsonBytes()
{
try
{
return this.toJsonString().getBytes("utf-8");
}
catch (Exception e)
{
return null;
}
}
}

我已经实现了字段ab,因为它在此请求中始终相同。在此类中,fromStringJson(String data) 接收包含用户尝试发送的所有 json 的数据字符串字段。在此函数中,我使用 gson.fromJson 将此字符串转换为我的 RequestExample 类的 json 对象类型。

所以主要问题是:如何调整我的 RequestExample 类以将字符串转换为 json 对象,无论 searchMethod 的类型如何。就像我在我的java应用程序中所说的那样,我不需要知道用户如何选择seachMethod。在我的服务器中是的,但这部分我已经实现了。所以现在,我只需要将请求发送到我的服务器。

最佳答案

如果不使用字段searchMethod,可以像Map一样实现

private Map<String, Object> searchMethod = new HashMap<>();

or

private Map<String, Map<String,Object>> searchMethod = new HashMap<>();

or

private Map<String, Map<String,String>> searchMethod = new HashMap<>();

关于java - GSON 反序列化/序列化层次结构类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44883965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com