我必须收到以下 JSON:
{
"method":"methodName1",
"args":{
"arg1Name":"arg1Value",
"arg2Name":"arg2Value"
}
}
这是另一个例子:
{
"method":"methodName2",
"args":{
"arg1Name":"arg1Value",
"arg2Name":"arg2Value"
"arg3Name":"arg3Value"
"arg4Name":"arg4Value"
}
}
我需要解析这些 JSON,以便使用指定的“args”作为参数调用指定的方法。
(对我而言)最简单的方法是使用 JsonParser
获取 JsonElement
,然后是 JsonObject
,然后提取每个值使用 .get()
... 像这样:
JsonParser jsonParser = new JsonParser();
JsonElement jsonElement = jsonParser.parse(jsonString);
if (jsonElement.isJsonObject()) {
JsonObject jsonObject = jsonElement.getAsJsonObject();
String method = jsonObject.get("method").getAsString();
JsonObject jsonArgs = jsonObject.getAsJsonObject("args");
String arg1 = jsonArgs.get("arg1Name").getAsString();
String arg2 = jsonArgs.get("arg2Name").getAsString();
}
然后我可以使用适当的参数调用指定的方法(使用 switch
)。
我只是想知道是否有更简单(或更漂亮)的方法来实现这一目标。
我可以使用 .fromJson()
来检索一个对象,但我不知道我应该如何创建我的类来这样做(有一些类似 args 的数组而不是所有方法具有相同数量的参数)。
我是 JSON(以及 Java)的新手。
我已经做到了:
import lotus.domino.*;
import com.google.gson.*;
import java.io.*;
import java.lang.reflect.Method;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
String jsonReceived = "{\"method\":\"methodName\",\"args\":{\"arg1Name\":\"arg1Value\",\"arg2Name\":\"arg2Value\"}}";
Gson gson = new Gson();
MethodCall mc = gson.fromJson(jsonReceived, MethodCall.class);
JavaAgent ja = new JavaAgent();
Method method = getClass().getMethod(mc.getMethod(), MethodCall.class);
String s = (String)method.invoke(ja, mc);
PrintWriter pw = getAgentOutput();
pw.println(s);
} catch(Exception e) {
e.printStackTrace();
}
}
public String methodName(MethodCall mc) {
String s = mc.getArgs().get("arg1Name") + " " + mc.getArgs().get("arg2Name");
return s;
}
}
import java.util.*;
public class MethodCall {
private String method;
private Map<String, String> args;
public String getMethod() {
return method;
}
public Map<String, String> getArgs() {
return args;
}
}
这似乎可行...但由于我是 Java 的新手,我不确定这是正确的方法。你怎么看?
最佳答案
也许 Gson Map 序列化程序足够聪明,可以反序列化它?
public class MethodCall {
private String method;
private Map<String, String> args;
}
(没有时间彻底测试它,但我希望它有效!:))
关于java - 使用 JSON 反序列化为 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3461473/