2014-12-05 66 views
0

我使用谷歌的GSON庫,並希望創建一個JSON它看起來像這樣的:{}是空集和地圖分別爲[]和而不是創建地圖或設置使用GSON

{ 
"teamSet":[], 
"classificationMap" : {} 
} 

公告用雙引號包圍。

我想使用GSON add/addproperty方法創建此Json,而不是使用Gson.toJson()方法將Java類轉換爲JSON。業務用例限制了我創建特定的Java類,因爲JSON結構可能會超時更改。所以我不能使用一類這樣的,因爲這將牢固地扎一個JSON結構的具體類

class Linkage{ 
private Set<String> teamSet; 
private Map<String, String> classificationMap; 

// getter, setter methods follow 
... 
} 

當我使用GSON.addproperty(genericObject,類型),它是圍繞附加[]和雙引號{ }。我爲我的數據庫要求使用了couchbase,[]和{}中的雙引號使得couchbase將它們視爲字符串而不是Set/Map。這使得我的地圖,減少無用的意見和馬車:(

請讓我知道,如果可能,而不必與一個具體的Java類拴起來。由於建立這樣一個JSON!

我當前的代碼如下像這樣:

// create types 
Type setType = new TypeToken<Set<String>>() {}.getType(); 
Type mapType = new TypeToken<Map<String, String>>() {}.getType(); 

Gson GSON = new Gson(); 

Set<String> teams = new HashSet<String>(); 
Map<String, String> classificationMap = new HashMap<String, String>(); 

JsonObject linkageJson = new JsonObject(); 
linkageJson.addProperty("teamSet", GSON.toJson(teams, setType)); 
linkageJson.addProperty("classificationMap", GSON.toJson(classificationMap, mapType)); 
+0

請發佈代碼如何添加設置和地圖。 – 2014-12-05 05:15:12

+0

請上傳/接受我的回答 – 2014-12-05 08:55:49

回答

0

我覺得某個地方,這是存放的toString()表示

請參考以下鏈接,它可以幫助你

click here

+0

我曾經在鏈接中提到過JsonTree()方法,它的工作非常棒。謝謝 – aneez 2014-12-05 08:34:57

1

在couchbase Java SDK中的2.X線,有JsonObject類,可能有適合您的需要。

這是完美的創建Json「手動」,仍然有一個簡單的通用對象表示形式,並且是通過sdk將json放入數據庫的官方方式。

它會是這樣的:

JsonObject obj = JsonObject.create(); 
obj.put("teamSet", JsonArray.from(new ArrayList(teams))) 
    .put("classificationMap", JsonObject.from(classificationMap)); 

誠然這是一個有點做作,因爲數組和子對象只能分別從List<?>Map<String, ?>工廠方法來構造。該類還支持一組有限的值類型(無自定義類,只有String,Number,Boolean等)。