Hello,
I must receive the following JSON:
{
"method":"methodName1",
"args":{
"arg1Name":"arg1Value",
"arg2Name":"arg2Value"
}
}
Here's another example:
{
"method":"methodName2",
"args":{
"arg1Name":"arg1Value",
"arg2Name":"arg2Value"
"arg3Name":"arg3Value"
"arg4Name":"arg4Value"
}
}
I need to parse those JSON in order to call the specified method with the specified "args" as parameters.
The easy way (for me) would be to use a JsonParser to get a JsonElement then a JsonObject and then extract each value using .get()... something like this:
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();
}
And then I could call the specified method with the appropriate arguments (using a "switch").
I was just wondering if there would be an easier (or prettier) way to achieve this. I could use .fromJson() to retrieve an object instead but I don't know how should I create my class to do so (there's something like an array or args and not all methods have the same number or args).
Sorry if this is an easy question, I'm just new to JSON (and to Java as well). Can someone helps a little? Or give advices?
Thanks a lot!
EDIT
I managed to do this:
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;
}
}
It seems to work... but since I'm new to Java, I'm not sure that's the proper way to do it. What do you think? Thanks again!