json序列化 java对象_使用JSON反序列化为Java对象?

我必须收到以下

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();

}

然后我可以使用适当的参数调用指定的方法(使用开关).

我只是想知道是否会有更简单(或更漂亮)的方法来实现这一目标.

我可以使用.fromJson()来检索一个对象,但我不知道我应该如何创建我的类(这里有类似args的数组,并不是所有方法都有相同数量的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 args;

public String getMethod() {

return method;

}

public Map getArgs() {

return args;

}

}

它似乎工作……但由于我是Java的新手,我不确定这是否是正确的方法.你怎么看?

最佳答案 也许Gson Map序列化器足够聪明,可以反序列化?

public class MethodCall {

private String method;

private Map args;

}

(没有时间对它进行彻底的测试,但我希望它有效!:))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值