gpt4 book ai didi

java - Bson - 如何将 JSON 转换为 List 并将 List 转换为 JSON?

转载 作者:可可西里 更新时间:2023-11-01 09:11:22 26 4
gpt4 key购买 nike

我将 Java Driver 3.0 与 MongoDB 结合使用,以便通过网络服务发送 JSON。

当我想将 Document 对象(org.bson.Document)转换为 JSON 时,我使用 obj.toJson(),当我想将 JSON 转换为 Document 对象时,我使用 Document.parse(json)

但是,当我处理文档列表时(在 JSON 中表示如下:[{"field1":1, ...}, {"field1":2, ...}]),我想不出一种干净的方法来进行这些转换。

到目前为止,我已经想出了这些“技巧”:

  • 从列表到 JSON:我将文档列表添加为更大文档中名为“列表”的字段的值。我将这个大文档转换为 JSON,并从获得的字符串中删除我不需要的内容。

    public String toJson(List<Document> docs){
    Document doc = new Document("list", docs);
    String json = doc.toJson();
    return json.substring(json.indexOf(":")+2, json.length()-1);
    }
  • 从 JSON 到列表:我通过将此“列表”字段添加到 JSON,将其转换为文档并仅从文档中获取此字段的值来执行相反的操作。

    public static List<Document> toListOfDocuments(String json){
    Document doc = Document.parse("{ \"list\":"+json+"}");
    Object list = doc.get("list");
    if(list instanceof List<?>) {
    return (List<Document>) doc.get("list");
    }
    return null ;
    }

我还尝试使用另一个 JSON 序列化程序(我使用了 Google 的序列化程序),但它没有给出与 Document 对象的内置 toJson() 方法相同的结果,特别是对于“_id”字段或时间戳。

有什么干净的方法可以做到这一点吗?

最佳答案

com.mongodb.util.JSON 包“仍然”没有被弃用,并且可以很好地处理 DBObject 列表。你只需要做一点转换:

    MongoClient client = new MongoClient(new ServerAddress("192.168.2.4", 27017));

MongoDatabase db = client.getDatabase("test");

MongoCollection<Document> collection = db.getCollection("sample");

MongoCursor<Document> iterator = collection.find().iterator();

BasicDBList list = new BasicDBList();
while (iterator.hasNext()) {
Document doc = iterator.next();
list.add(doc);
}
System.out.println(JSON.serialize(list));

并且将那个“列表”添加到另一个 DBObject 中并没有错,它具有输出中使用的键“list”。否则,您可以深入研究使用另一个 JSON 解析器并将游标迭代器中的每个文档提供给它。

这取决于您输入的大小,但虽然这仍然有效,但它确实在代码中看起来更清晰。

关于java - Bson - 如何将 JSON 转换为 List<Document> 并将 List<Document> 转换为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31380600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com