我有一個Java應用程序發送json內容到我的服務器(C++)。我的服務器,我收到的JSON,做解析,驗證等,併發送響應與JSON了。 我在我的Java應用程序一個要求,即有此JSON體(例如):GSON反序列化/序列化層次類
{
"a": "a",
"b": "b",
"searchMethod": {
"searchByUser": {
"userId": "userId"
}
}
}
但相同的命令,我可以有其他searchMethod
:
{
"a": "a",
"b": "b",
"searchMethod": {
"searchByEmail": {
"email": "[email protected]"
}
}
}
因此,當用戶做要求我們可以向我的服務器發送這兩個不同的json bodys中的一個。我永遠不知道我們發送了什麼searchMethod
。這部分(檢查用戶發送的searchMethod是什麼等),當我收到json時,我在我的C++服務器上執行操作。所以在我的Java應用程序中,我只需要使用gson發送一個searchMethod
對象與他們的內容。
這是我班的要求去做:
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;
}
}
}
我已經實現了領域a
和b
,因爲它總是在這個要求是相同的。在這個類中,fromStringJson(String data)
接收包含用戶嘗試發送的所有json的數據字符串字段。在這個函數中,我使用gson.fromJson
將這個字符串轉換爲我的RequestExample
類的json對象類型。
所以主要問題是:如何適應我的RequestExample
類將字符串轉換爲json對象,而不管searchMethod
的類型如何。就像我在我的Java應用程序中所說的,我不需要知道用戶如何選擇seachMethod
。在我的服務器是,但這部分我已經實現。所以現在,我只需要將請求發送到我的服務器。
感謝您的答覆。我瞭解你的代碼,但我有一個疑問。什麼是對象? searchByUser還是searchByEmail?在這張地圖中,我需要定義一些對象,但我不知道用戶選擇的對象類型。你明白我的疑問嗎?同樣的命令可以有searchByUser或searchByEmail ..當我收到我的字符串數據時,我不知道用戶放什麼searchMethod – RMRMaster
對不起。我不需要用戶java hiearchy。我只能使用像這樣的地圖: Map> searchMethod,因爲我的服務器中的json內容有關的閥值。通過這種方式,我可以發送searchMethod和內部的c + +服務器我解析json並進行驗證:) –
RMRMaster
據我瞭解,您找到了解決方案,所以我編輯了其他人的答案 –