2014-12-05 54 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等)。