MongoDB java 驱动程序 3.2:将 Json 字符串解析为 ArrayList<Document>
MongoDB java driver 3.2: parsing Json String to ArrayList<Document>
在早期版本的Java 驱动程序中,JSON.parse 用于将Json 字符串解析为BasicDBObject 或BasicDBList。但是在较新的 java 驱动程序中,BasicDBObject 现在已移至 Document,而 BasicDBList 已移至 ArrayList。 Document.parse 可用于将 Json 字符串解析为文档,但我找不到任何可将 Json 字符串数组解析为 ArrayList 的等价物。 JSON.parse 仍然会 return BasicDBList 而不是 ArrayList ,因此例如 ArrayList 会崩溃,因为无法将单个元素转换为文档。
这里的问题不是类型转换。 JSON.parse 将 return 一个 BasicDBList,它在类型转换为 ArrayList 时仍然是一个 BasicDBList,因为 ArrayList 是一个超类。问题是将 json 字符串数组解析为 ArrayList 并且可能更具体地缺少编解码器(尽管 BasicDBObject 有编解码器,但 BasicDBList 没有编解码器)。有什么 working/standard 解决方案吗?
我的代码片段:
ArrayList<Document> category = (ArrayList<Document>) JSON.parse(((requestBody.getArgumentByKey("category")).toString()));
这会在以下位置崩溃:
((Document) category.get(0))
带有以下消息:
java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to org.bson.Document
JSON.parse()
将 return,因为没有更好的术语,遗留类型。你会得到一个 List<DBObject>
。 DBObject
s 不是 Document
s 并且不能那样转换。要使用 JSON.parse()
,您需要继续使用 DBObject
或将那些 DBObject
传递给 Document
的构造函数,该构造函数采用 Map
.
在早期版本的Java 驱动程序中,JSON.parse 用于将Json 字符串解析为BasicDBObject 或BasicDBList。但是在较新的 java 驱动程序中,BasicDBObject 现在已移至 Document,而 BasicDBList 已移至 ArrayList。 Document.parse 可用于将 Json 字符串解析为文档,但我找不到任何可将 Json 字符串数组解析为 ArrayList 的等价物。 JSON.parse 仍然会 return BasicDBList 而不是 ArrayList ,因此例如 ArrayList 会崩溃,因为无法将单个元素转换为文档。
这里的问题不是类型转换。 JSON.parse 将 return 一个 BasicDBList,它在类型转换为 ArrayList 时仍然是一个 BasicDBList,因为 ArrayList 是一个超类。问题是将 json 字符串数组解析为 ArrayList 并且可能更具体地缺少编解码器(尽管 BasicDBObject 有编解码器,但 BasicDBList 没有编解码器)。有什么 working/standard 解决方案吗?
我的代码片段:
ArrayList<Document> category = (ArrayList<Document>) JSON.parse(((requestBody.getArgumentByKey("category")).toString()));
这会在以下位置崩溃:
((Document) category.get(0))
带有以下消息:
java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to org.bson.Document
JSON.parse()
将 return,因为没有更好的术语,遗留类型。你会得到一个 List<DBObject>
。 DBObject
s 不是 Document
s 并且不能那样转换。要使用 JSON.parse()
,您需要继续使用 DBObject
或将那些 DBObject
传递给 Document
的构造函数,该构造函数采用 Map
.