如何将表示为Json字符串的对象存储到Couchbase Lite中?

时间:2015-04-18 22:35:59

标签: java android json serialization couchbase-lite

我在Android应用中使用Couchbase Lite。在应用程序中,我从服务器检索一堆Json对象,我想在本地存储。但我似乎无法在不事先将它们序列化为HashMap的情况下找到一种方法。由于数据无论如何都存储为Json,这会导致不必要的开销并导致许多样板代码。

如果我应该更具体,这是一种Json I fetch:

    "events":[
        {
        "title":"event1",
        "venue":{
            "name":"venue1"
        }
    ]

我使用Gson将数组中的内容转换为POJO:

public final class Event {
    @SerializedName("title") private String title;
    @SerializedName("venue") private Venue venue;

    public static final class Venue {
        @SerializedName("name") private String name;

        public Map<String, Object> toMap() {
            Map<String, Object> docContent = new HashMap<String, Object>();
            docContent.put("name", name);
            return docContent;
        }
    }

    public Map<String, Object> toMap() {
        Map<String, Object> docContent = new HashMap<String, Object>();
        docContent.put("title", title);
        docContent.put("venue", venue.toMap());
        return docContent;
    }

    // getters left out
}

然后我使用Java对象来存储它:

Document document = database.createDocument();
document.putProperties(event.toMap());

嵌入更深入,还有更多领域。我觉得必须有办法让事情变得更容易。

感谢任何提示!

2 个答案:

答案 0 :(得分:1)

我还没有看到任何方法直接在待办事项文档中存储JSON,但您可以使用此处列出的一些建议来简化您的POJOfication:Convert Json to Map

你提到你从服务器获取你的JSON,如果你使用了像RetroFit这样的东西:https://github.com/square/retrofit你根本不需要直接处理JSON。您仍然需要编写映射逻辑,但是您可以直接将Web服务响应对象提供给couchbase。

答案 1 :(得分:0)

以下是如何执行此操作的示例。如果您的JSON是JSONString

ObjectMapper mapper = new ObjectMapper();  // Usually you only need one instance of this per app.
try {
    Map<String, Object> map = mapper.readValue(JSONString, Map.class);
    Document document = db.createDocument();
    document.putProperties(map);
} catch (IOException | CouchbaseLiteException ex) {
    ex.printStackTrace();
}