我在MongoDB中使用Java驱动程序3.0,以便通过Web服务发送JSON。
当我想将文档对象(org.bson.文档)转换为JSON时,我使用obj.toJson()
,当我想将JSON转换为文档对象时,我使用Document.parse(json)
。
但是,当我处理文档列表时(如JSON中所示:[{“field1”:1,…},{“字段1”:2,…}]
),我想不出一个干净的方法来进行这些转换。
到目前为止,我已经想出了这些“黑客”:
>
从List到JSON:我将文档列表作为一个名为“List”的字段的值添加到一个更大的文档中。我将这个大文档转换为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()
方法相同的结果,特别是对于“\u id”字段或时间戳。
有什么干净的方法可以做到这一点吗?
有驱动程序3.0的解决方案。
您可以按照以下步骤操作:
BasicDBObject dbObject = (BasicDBObject) JSON.parse("yourJsonString");
MongoCollection<BasicDBObject> table = db.getCollection("collectionName", BasicDBObject.class);
table.insertOne(dbObject);
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
中,并使用输出中使用的键“列表”,也没有什么错。否则,您可以深入研究使用另一个JSON解析器,并将游标迭代器中的每个文档提供给该解析器。
这取决于您输入的大小,但是尽管这仍然有效,但它在代码中看起来确实干净得多。
我试图将JSON字符串(必须是列表)转换为对象列表: 这是我的服务。class: 我得到了: InvalidDefinitionException:无法构造的实例(不存在像默认构造那样的创建者): 更新: 但仍然是个例外: InvalidDefinitionException:无法构造的实例(不存在像默认构造那样的创建者):
问题内容: 如何在Java中将通用列表转换为json。我有这样的类.. 我想将outputList转换为Java中的json。转换后我会将其发送到客户端。 问题答案: 为此使用GSON库。这是示例代码 这是Gson的Maven依赖 或者您可以从此处直接下载jar并将其放在您的课程路径中 http://code.google.com/p/google- gson/downloads/detail
此API调用返回一个可能较大的列表 排序、搜索和访问一个潜在的大型LinkedList将非常缓慢,对我的程序来说是不可接受的。因此,我需要将列表转换为ArrayList,以确保程序的实际效率。但是,由于列表很可能已经是ArrayList,因此不必要地创建列表的新ArrayList副本将效率低下。 考虑到这些约束,我提出了以下方法将列表转换为ArrayList: 我的问题是:这是处理具有未知实现的列
如何将一个var转换为两个var列表? 下面是我的输入变量: 我希望我的结果应该是:
我有我想分批处理的编号列表。
问题内容: 我有一个列表,我需要使用GSON将其转换为JSON对象。我的JSON对象中包含JSON数组。 以下是我的代码,其中我需要将列表转换为其中具有JSON数组的JSON对象- 到目前为止,列表中只有两项-所以我需要这样的JSON对象- 做这个的最好方式是什么? 问题答案: 如果在您的方法中为,则应进行序列化。 这将为您提供所需的JSON输出。