在Java中动态构建JSON请求

时间:2014-09-19 11:17:53

标签: java json

我正在创建一个可以向服务器发送不同请求的客户端。我的目标之一是没有任何大的依赖。

请求可能如下所示:

{
  "method": "getUser",
  "methodParameters": {
    "a": "b",
    "c": "d",
    "e": "f",
    "data": {
      "u": "v",
      "x": "y"
    }
  },
  "version": "1.3"
}

对于每种类型的请求方法,数据对象的内容都不同。 我的问题是,动态构建这些JSON请求的最佳“Java方式”是什么?

到目前为止,我只提出了一些我认为不是最佳方法的替代品。

示例1

只是一个普通的POJO,包含一些set / getters和一个SimpleJSON对象。

public class MethodOne {
    JSONObject data = new JSONObject();

    private void setX(String x) {
        data.put("x", x);
    }

    private String getX() {
        return (String) data.get("x");
    }

    private void setY(String y) {
        data.put("y", y);
    }

    private String getY() {
        return (String) data.get("y");
    }
}

示例2

public class RequestData {
    public JSONObject methodOne(String x, String y) {
        JSONObject data = new JSONObject();
        data.put("x", x);
        data.put("y", y);
        return data;
    }

    public JSONObject methodTwo(String a, String b) {
        JSONObject data = new JSONObject();
        data.put("a", a);
        data.put("b", b);
        return data;
    }
}

那你觉得怎么样?以上任何一种解决方案对于这项工作是否更好,或者我还有第三种解决方案吗?感谢。

1 个答案:

答案 0 :(得分:1)

请注意,您的示例1不是POJO,它是一个包裹的JSONObject

GSON可与真正的POJO一起使用:

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  //setters/getters optional
}

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);

如果您需要getAsJsonObject方法而不是String,还有{{1}}方法。另请参阅https://stackoverflow.com/a/13434887/360211