【问题标题】:Creating Map or Set using GSON使用 GSON 创建地图或集合
【发布时间】:2014-12-05 05:10:45
【问题描述】:

我正在使用 Google 的 GSON 库并希望创建一个如下所示的 JSON:

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

注意 [] 和 {} 分别是空的 Set 和 Map 并且没有用双引号括起来。

我想使用 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, type) 时,它会在 [] 和 {} 周围附加双引号。我正在使用 couchbase 来满足我的数据库要求,并且 [] 和 {} 周围的双引号使 couchbase 将它们视为字符串而不是 Set/Map。这使我的 Map-Reduce 视图无用且有问题:(

请让我知道是否可以创建这样的 JSON 而不必将其与具体的 JAVA 类联系起来。谢谢!

我当前的代码如下所示:

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

【问题讨论】:

  • 请发布您如何添加集合和地图的代码。
  • 请支持/接受我的回答

标签: java json gson couchbase


【解决方案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&lt;?&gt;Map&lt;String, ?&gt; 工厂方法构造。该类还支持一组有限的值类型(没有自定义类,只有字符串、数字、布尔值等...)。

【讨论】:

    【解决方案2】:

    我觉得它在某个地方存储了 toString() 表示。

    请参考下面的链接,它可能会帮助你。

    click here

    【讨论】:

    • 我使用了链接中提到的 toJsonTree() 方法,它的效果非常好。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多