2014-09-19 81 views
1

我正在創建可以向服務器發送不同請求的客戶端。我的部分目標是沒有任何大的依賴關係。在Java中動態構建JSON請求

一個請求可以看起來如下:

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

數據對象的內容是爲每一個類型的請求方法的不同。 我的問題是,什麼是動態構建這些JSON請求的最佳「Java方式」?

到目前爲止,我只來了一對夫婦的替代品,我不認爲是這樣做的最好方式..

例1

只是一個普通的POJO一些集/ 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

您可以使用JAXB http://stackoverflow.com/questions/19158056/jaxb-mapping-to-json – 2014-09-19 11:20:13

回答

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。關於這一點,另請參閱https://stackoverflow.com/a/13434887/360211